gitlab备份与还原
一.备份
配置修改
vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab-backups" //备份文件存储路径,如果没有配置,则备份数据到默认”/var/opt/gitlab/backups“下
gitlab_rails['backup_archive_permissions'] = 0644 //生成的备份文件权限
gitlab_rails['backup_keep_time'] = 2592000 //默认备份保留天数为7天(604800秒,这里是30天)
更改完成后重载配置文件
gitlab-ctl reconfigure
本地部署完成的gitlab服务器上操作,手动备份
gitlab-rake gitlab:backup:create
远程备份数据
-
gitlab服务器A(192.168.80.111),备份服务器B(192.168.80.112)
-
配置服务器A到B免密登录,在A服务器执行 ssh-keygen -t rsa 命令,生成密钥文件
-
A服务器执行 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.80.112, 将公钥文件传输的备份服务器B,并生效
-
创建远程备份脚本
vim /deploy/bin/backup_code.sh
#!/bin/bash
# gitlab 服务器备份路径
#LocalBackDir=/var/opt/gitlab/backups #默认备份路径
LocalBackDir=/data/gitlab-backups #修改配置文件后,自定义的备份路径
# 远程备份服务器 gitlab备份文件存放路径
RemoteBackDir=/data/code_backup
# 远程备份服务器 登录账户
RemoteUser=root
# 远程备份服务器 IP地址
RemoteIP=192.168.80.112
#当前系统日期
DATE=`date +"%Y-%m-%d"`
#Log存放路径
LogFile=$LocalBackDir/log/$DATE.log
#执行备份
gitlab-rake gitlab:backup:create
# 查找 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
#删除备份服务器上旧的备份文件
ssh $RemoteUser@$RemoteIP "/deploy/bin/auto_remove_old_code_backup.sh"
5.修改脚本权限
chmod 777 /deploy/bin/backup_code.sh
6.创建日志存放目录
mkdir -p /data/gitlab-backups/log
7.定时删除备份服务器上的备份文件,在备份服务器B上创建定时删除脚本
vim /deploy/bin/auto_remove_old_code_backup.sh
#!/bin/bash
# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/data/code_backup
echo '查找远程备份路径下,超过3天且文件后缀为.tar 的 Gitlab备份文件 然后删除'
find $GitlabBackDir -type f -mtime +3 -name '*.tar*' -exec rm {} \;
8.修改脚本权限
chmod 777 /deploy/bin/auto_remove_old_code_backup.sh
- 在服务器A添加定时任务
vim /etc/crontab
#每天23时执行脚本
0 23 * * * root /deploy/bin/backup_code.sh
``
二. 备份恢复
将备份文件拷贝到待恢复测试的服务器上,注意:GitLab恢复数据的时候需要满足版本一致,即进行恢复的GitLab的版本和备份数据时的GitLab的版本一致。
1、安装git
2、安装gitlab
3、修改配置文件
4、启动gitab服务
5、停止与连接 数据库有关的进程
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
这里的备份文件名是 1687460936_2023_06_22_14.3.3_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=/var/opt/gitlab/backups/1687460936_2023_06_22_14.3.3
注意!!!! 指定备份文件时得把 _gitlab_backup.tar去掉 才可以正常恢复,否则会报错说找不到文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?