从网络上看到的大部分git 备份都说没有增量备份方式,使用命令做全量备份,还有的先备份到本地,然后再复制到远程,造成磁盘和网络带宽的浪费。
https://blog.csdn.net/liumiaocn/article/details/107936967
这个链接提到的增量备份比较复杂,个人比较懒看着就头疼。
想到linux 有个rsync 命令可以只传输变化的文件(基于大小和时间戳),简单测试了下,还是可以的(只用于不是特别繁忙,git服务器能够有空闲时间的)。步骤如下:
假设A是主服务器,B是备份服务器。
1. 首先将A克隆一个镜像,作为B。(我用的是虚拟机)
2. 在B上使用ssh-keygen 创建私钥和公钥,然后将公钥id_rsa.pub 内容复制或cat 到A服务器的.ssh目录中的authorized_keys。目的是让A信任B,B可以直接执行ssh 命令而不需要输入口令。有些文档使用了rsync --password-files 参数,但要求将参数放到文件里,都是明文,还不如使用上述方式更安全些。
3. 我用的gitlab ce 是虚拟机部署方式,默认使用了redis 和 posggresql 数据库,在/var/log/gitlab下面包含数据库等,还有一部分是在/u01下,也有一些数据存储在这里。为了省事,我是将/var/log/gitlab目录以及/u01目录都同步到B。
4. 在执行rsync 同步命令前,首先关闭B上的gitlab服务(包括服务器),另外就是要保证A机没有提交操作。
5. 验证AB同步情况。
6. 验证无误后,crontab -u root -e 创建一个cron,用于定时执行。
脚本很简单(没有考虑命令执行异常,有需要可以加):
echo `gitlab-ctl stop` >> /opt/rsync.log
echo `gitlab-ctl stop` >> /opt/rsync.log
echo `rsync -avzP root@192.168.102.7:/u01 /` >>/opt/rsync.log
echo `rsync -avzP root@192.168.102.7:/var/opt/gitlab /var/opt` >>/opt/rsync.log
echo ' ' >>/opt/rsync.log
echo `date` ' executed rysnc cmd successfully ' >>/opt/rsync.log
echo ' ' >>/opt/rsync.log
echo `gitlab-ctl start` >>/opt/rsync.log
echo '#############################################' >>/opt/rsync.log
echo ' ' >>/opt/rsync.log