git服务器远程定时备份

一、背景

  需求:本地git服务器A:192.168.251.10,远程备份服务器B:192.168.251.11,需要将服务器A中的git目录下的git工程文件定时备份到远程服务器B中。

   因Gitlab具有自动备份功能,但我们目前的需求,主要是针对git版本的工程文件进行备份,所有,不能使用gitlab自动备份功能。初步采用:

第一步,先在本地git服务器上将文件压缩备份到本地上;

第二步,再将本地服务器上的压缩文件定时拷贝到远程服务器B上;

第三步,最后,定时删除备份服务器B上的过期备份文件。

二、本地定时备份

1、创建本地定时备份脚本

1)创建定时备份脚本 touch /home/local_backup.sh;

2)在脚本中添加下列信息:

#!/bin/sh
#创建一个临时文件(要保存备份的路径)
mkdir /data/backups/git
#数据存在/home/git目录下,备份到backups目录下,所以先将数据拷过来
cp -r /home/git  /data/backups/git
#将数据所在文件夹backups打包
tar -zcPvf /data/backups/gitbackup$(date +%Y%m%d).tar.gz /data/backups/git
#删除临时文件内容
rm -rf /data/backups/git
#删除备份文件夹下超过30天的文件
find /data/backups -type f -mtime +30 -name "*.tar.gz" -exec rm -rf {} \;

3)修改本地定时备份脚本的权限

chmod 777 local_backup.sh

2、定时执行脚本

1)查看你crond服务状态:service crond status

2)添加定时任务:

输入crontab -e 后,在打开的文件下添加定时命令

0 0 1 * *  sh /home/local_backup.sh  #表示每月的1号0时0分执行一次备份脚本

注意:脚本路径前面的sh不能省略

补充:sh脚本前面五个字段分别表示分钟(0-59)、小时(0-23)、日(1-31)、月(0-12)、星期几(0-6)后面的为脚本所在目录

3)重新启动crond服务

service crond restart

2、测试验证

    修改定时任务中的时间:例如可设置每分钟或者具体的时间执行脚本,查看文件备份是否正常。

三、远程定时备份

 远程定时备份主要是对本地服务器与远程备份服务器进行密钥配对,取消scp传输文件所需密码验证的限制。

方法:将本地服务器A生成的公钥文件拷贝到远程服务器B,使得本地服务器A可以免密登录操作远程备份服务器B

1、在本地服务器A上生成密钥对

1)生成rsa证书

ssh-keygen -t rsa

一直回车,接受默认值即可。

在当前用户的.ssh目录下生成文件如下:

2)将生成的公钥文件拷贝备份

cp  id_rsa.pub id_rsa.pub.A

2、将服务器A上的公钥文件上传到服务器B上

1)进入远程服务器B中的root/.ssh目录中,若没有当前目录,可以先创建一个

2)使用scp命令,远程拷贝服务器A中的公钥文件到远程服务器B中的.ssh目录下

scp /root/.ssh/id_rsa.pub.A [email protected]:/root/.ssh/

3、密钥配对

1)创建authorized_keys文件

touch /root/.ssh/authorized_keys

2)将拷贝过来的id_rsa.pub.A文件追加到authorized_keys文件中

cat id_rsa.pub.A >> authorized_keys

3)修改authorized_keys文件权限

chmod 400 authorized_keys

4)测试验证,在服务器A上使用scp命令拷贝文件到远程服务器B上,是否还需要输入密码

4、定时将服务器A上的备份文件上传到服务器B上

1)在服务器A上创建远程备份脚本

vim /root/auto_backup_to_remote.sh

2)在脚本中添加下列内容,并保存

#!/bin/bash

# git 服务器文件备份路径
LocalBackDir=/data/backups

# 远程备份服务器 git备份文件存放路径
RemoteBackDir=/root/git_backup

# 远程备份服务器 登录账户
RemoteUser=root

# 远程备份服务器 IP地址
RemoteIP=192.168.251.11(备份服务器B的地址,请你自行修改,注意:=后面不要有空格)

#当前系统日期
DATE=`date +"%Y-%m-%d"`

#Log存放路径
LogFile=$LocalBackDir/log/$DATE.log

# 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60  -name '*.tar*')

#新建日志文件
touch $LogFile

#追加日志到日志文件
echo "Gitlab auto backup to remote server, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile

# 输出日志,打印出每次scp的文件名
echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile


#备份到远程服务器
scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir

#追加日志到日志文件
echo "---------------------------------------------------------------------------" >> $LogFile

3)修改远程备份脚本auto_backup_to_remote.sh的权限

chmod 777 auto_backup_to_remote.sh

4)创建日志存在目录

mkdir -p /data/backups/log

5、创建定时计划

在本地服务器A中添加定时任务

1)输入命令 crontab -e ;

2)在打开的文件中添加定时脚本

0 0 * * * sh /root/auto_backup_to_remote.sh #每天0时0分执行以下远程备份脚本文件

3)重启crontab,使得定时任务生效

systemctl restart crond

6、测试验证远程备份

   修改本地服务器中的定时任务执行时间,查看远程服务器B中是否有备份的git文件。

四、定时删除过期备份文件

因远程备份文件在服务器B上,所以,定时删除过期备份文件需要在服务器B上创建定时任务

我们定义删除脚本,备份文件超过30天的将自动删除掉。

1、创建删除过期备份文件的脚本

1)创建删除脚本

touch /home/root/auto_remove_old_backup.sh

2)在脚本文件中添加如下内容

#!/bin/bash
# 远程备份服务器 git备份文件存放路径
GitlabBackDir=/root/git_backup
# 查找远程备份路径下,超过30天 且文件后缀为.tar 的 Git备份文件 然后删除
find $GitlabBackDir -type f -mtime +30 -name '*.tar*' -exec rm {} \;

3)修改删除过期备份脚本的权限

chmod 777 auto_remove_old_backup.sh

2、定时执行删除脚本

一般添加定时任务有两种方式:

方式一:使用命令crontab -e ,将定时任务添加后保存并重启crond服务,使得定时任务生效,之前服务器A上采用的该方式;

方式二:将定时任务添加到/etc/crontab文件中,服务器B采用该方式。

1)打开/etc/crontab文件

vim /etc/crontab

2)在文件中添加定时任务命令

# 添加定时任务,每天凌晨2点,执行删除过期的Git备份文件
0  2  * * *   root  /home/root/auto_remove_old_backup.sh 

3)重启crond服务

#重新加载cron配置文件
sudo service crond reload
#重启cron服务
sudo service crond restart

3、测试验证

1)首先在备份目录下,创建日期超出30天的tar文件,假设当前时间为2018年12月14日,创建以下几个文件;

touch -t 201811011230 test1.tar
touch -t 201811131230 test2.tar
touch -t 201811141230 test3.tar
touch -t 201811151230 test4.tar

2)修改定时任务中的执行时间;

3)查看是否已将过期的备份文件正常删除

猜你喜欢

转载自blog.csdn.net/xuexi_39/article/details/86477703