一、环境准备
1.gitlab服务器所在的服务器A(192.168.1.16);
2.备份服务器B(192.168.1.37);
3.已设置gitlab定时在本机备份;
二、通过密钥配对方式scp免密传输
1.首先在A机器上生成ssh证书:
ssh-keygen -t rsa
执行以上命令时,会让你填写生成私钥公钥的位置,设置密码,注意在这里不要对其进行密码设置,不然执行scp传输命令仍然会让你输入证书的密码!!!
2.在A机器上通过cp命令拷贝一份公钥
cd /root/.ssh
cp id_rsa.pub id_rsa.pub.A
把A机器上刚刚生成的公钥拷贝一份。
3.将A机器的公钥文件传输给B机器
scp /root/.ssh/id_rsa.pub.A root@192.168.1.37:/root/.ssh/
4.密钥配对
在B机器上/root/.ssh下创建authorized_keys文件
touch /root/.ssh/authorized_keys
把之前从A机器拷贝过来的id_rsa.pub.A文件内容添加B机器的authorized_keys文件中。
cd /root/.ssh/
cat id_rsa.pub.A >> authorized_keys
修改B机器中的authorized_keys文件权限(如果不修改也可能会密钥配对失败)
chmod 400 authorized_keys
三、定时将备份文件通过scp命令传输到备份机器上
1.创建远程备份脚本
在gitlab服务器上,在 ./root 目录创建auto_backup_to_remote.sh脚本
vim /root/auto_backup_to_remote.sh
添加下面的内容,并:wq保存
#!/bin/bash
# gitlab 服务器备份路径
LocalBackDir=/var/opt/gitlab/backups
# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/root/gitlab_backup
# 远程备份服务器 登录账户
RemoteUser=root
# 远程备份服务器 IP地址
RemoteIP=(备份服务器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
修改该文件的权限,以便能让系统正常执行该shell脚本
chmod 777 auto_backup_to_remote.sh
创建该脚本日志存放目录
mkdir -p /var/opt/gitlab/backups/log
最后一步,通过crontab定时任务定时执行该脚本
crontab -e
在这里我设定的是一天两备份,中午和晚上各一次。根据自己需要调整。
10 12 * * * /root/auto_backup_to_remote.sh -D 1
10 19 * * * /root/auto_backup_to_remote.sh -D 1
重启crontab让它生效
systemctl restart crond
四、在备份服务器定时删除过期的备份文件
因为备份服务器不可能把所有备份的gitlab文件全保留,这时候可以采用定时删除gitlab备份文件的方式解决。
创建目录
mkdir -p /root/gitlab_backup
创建过期删除的脚本
vim /root/auto_remove_old_backup.sh
把脚本内容写入该文件中
#!/bin/bash
# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/root/gitlab_backup
# 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除
find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} \;
修改该脚本的权限。
chmod 777 auto_remove_old_backup.sh
添加定时计划
crontab -e
设置该脚本定时执行时间
0 0 * * * /root/auto_remove_old_backup.sh
重启crontab
systemctl restart crond
以上就是完整的备份啦