方案架构
采用备机主动拉取模式:
- 业务主机定时自动压缩 Git 仓库为备份包
- 备机通过 Rsync 定时拉取
- 按星期 1~5 循环覆盖,无需手动删旧备份,长期零维护
- 最大限度降低业务主机 IO 与负载
前置准备
- 主备服务器内网互通
- 备机可 SSH 免密登录业务主机
- 主机 Git 仓库路径固定
一、业务主机:配置 Git 仓库自动打包
1.1 主机打包脚本
主机新建脚本:/home/git_dump.sh,运行
#!/bin/bash
# Git仓库路径
GIT_PATH="/data/git/repo"
# 备份压缩包名称
BAK_FILE="/home/gitrepo.tar.gz"
# 压缩整个Git仓库
tar -zcvf $BAK_FILE $GIT_PATH
1.2 赋予执行权限
运行
chmod +x /home/git_dump.sh
1.3 主机定时任务 每日凌晨自动打包
运行
crontab -e
写入
0 0 * * * /home/git_dump.sh
每天 0 点自动把 Git 仓库压缩为 /home/gitrepo.tar.gz
二、备机配置 SSH 免密登录主机
2.1 备机生成密钥
运行
ssh-keygen -t rsa
全程回车,不设密码。
2.2 公钥追加到主机
运行
cat /root/.ssh/id_rsa.pub | ssh root@主机IP "cat >> /root/.ssh/authorized_keys"
2.3 验证免密
运行
ssh root@主机IP
三、备机 Rsync 拉取备份脚本
备机新建:/root/git_backup.sh,运行
#!/bin/bash
# 业务主机IP
MASTER_IP="192.168.x.x"
# 获取星期 1~5
WEEK=$(date +%u)
# 拉取主机备份包,按星期后缀覆盖
rsync -av root@$MASTER_IP:/home/gitrepo.tar.gz /home/gitrepo.tar.gz.$WEEK
# 如有第二个备份包同理
rsync -av root@$MASTER_IP:/home/gitrepo2.tar.gz /home/gitrepo2.tar.gz.$WEEK
3.1 加执行权限
运行
chmod +x /root/git_backup.sh
四、备机定时任务
运行
crontab -e
周一至周五早 6 点拉取,无日志输出,运行
0 6 * * 1-5 /root/git_backup.sh
五、备份文件规则
备机 /home 自动生成循环覆盖:
- gitrepo.tar.gz.1 周一
- gitrepo.tar.gz.2 周二
- gitrepo.tar.gz.3 周三
- gitrepo.tar.gz.4 周四
- gitrepo.tar.gz.5 周五
六、测试方法
6.1 主机手动测试打包
运行
/home/git_dump.sh
6.2 备机手动测试拉取
运行
/root/git_backup.sh
6.3 查看定时执行
运行
tail -f /var/log/cron
七、注意事项
- Rsync 只用
-av,内网不需要-z压缩。 - 禁止加
--delete,避免误删本地备份。 - 免密配置必须用
>>追加,不能用>覆盖。 - 主机 Git 仓库路径按实际修改脚本里
GIT_PATH。 - 定时不输出日志,保持系统干净无垃圾。