一、gitlab主机的脚本(生成gitlab的备份文件,且传输到备份机服务器指定目录)
1、在gitlab主机上创建备份文件,并备份文件传到gitlab备用机服务器 (sh脚本文件)
docker exec -i gitlab gitlab-rake gitlab:backup:create #执行备份操作,生成压缩包
cd /opt/gitlab/data/backups #进入挂载目录
backupName=$(ls -lt /opt/gitlab/data/backups | grep gitlab_backup.tar | head -n 1 |awk '{print $9}');
backupName=${backupName:0:28} #根据规则截取备份包的文件名
echo ${backupName}
sshpass -p 要传输的服务器的主机密码 scp "/opt/gitlab/data/backups/"$backupName"_gitlab_backup.tar" root@ip:"/opt/backups/gitlab/"$backupName"_gitlab_backup.tar"
这里是用服务器crontab做定时执行上述脚本(主从的执行的时间是错开的,主机基本先执行,等主机执行完成之后,备机服务器执行备机的脚本,必须按照顺序),下面是我用的执行脚本
#编辑定时任务,没有crontab自己安装
crontab -e
#编辑定时任务(主机执行时间在前)
30 23 * * * sh /opt/gitlab/data/backups/gitlab_backup.sh
#查看可用的定时任务
crontab -l
二、gitlab从机的脚本(将gitlab主机考过来的备份文件传到gitlab的docker容器指定文件夹中,并且进入容器根据备份文件备份恢复)
2、将主机传过来的备份文件放到容器中去,在容器中执行还原操作 (sh脚本文件)
cd /opt/backups/gitlab
backupName=$(ls -lt /opt/backups/gitlab | grep gitlab_backup.tar | head -n 1 |awk '{print $9}');
backupName=${backupName:0:28}
echo ${backupName}
docker cp "/opt/backups/gitlab/"$backupName"_gitlab_backup.tar" gitlab:"/var/opt/gitlab/backups/"$backupName"_gitlab_backup.tar"
sleep 2
# 传到容器中之后将文件删除
rm -rf "$backupName"_gitlab_backup.tar
#在宿主机执行在docker中命令的shell脚本需要按照该格式(也是脚本的一部分)
docker exec -i gitlab /bin/bash -c 'cd /var/opt/gitlab/backups && chmod 777 '$backupName'_gitlab_backup.tar && yes yes|gitlab-rake gitlab:backup:restore BACKUP='$backupName' && rm -rf '$backupName'_gitlab_backup.tar'
备份机的定时任务执行上述脚本
#编辑定时任务,没有crontab自己安装
crontab -e
#编辑定时任务(备机执行时间在后)->>>>>>>>>>>>>>>>>>>>>>>请注意
45 23 * * * sh /opt/gitlab/data/backups/gitlab_backup.sh
#查看可用的定时任务
crontab -l