CentOS上GitLab备份与恢复策略
使用GitLab提供的gitlab-rake命令创建全量备份,涵盖仓库代码、数据库(PostgreSQL)、用户/组权限、SSH密钥等所有关键数据。执行命令:
sudo gitlab-rake gitlab:backup:create
该命令会在默认路径生成压缩包(格式:TIMESTAMP_gitlab_backup.tar,如1700000000_2025-03-17_15.0.0_gitlab_backup.tar)。
默认备份路径为/var/opt/gitlab/backups,可通过修改/etc/gitlab/gitlab.rb配置文件调整:
gitlab_rails['backup_path'] = "/mnt/backups" # 自定义路径(如挂载的磁盘分区)
gitlab_rails['backup_archive_permissions'] = 0644 # 备份文件权限(可选)
修改后需运行sudo gitlab-ctl reconfigure使配置生效。
通过crontab设置定时任务,实现每日自动备份(如凌晨2点):
crontab -e
添加以下行(CRON=1表示立即执行,忽略定时任务的延迟):
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
保存后,cron会自动执行备份任务。
使用rsync将本地备份同步到远程服务器(如remote-server-ip的/remote/backups目录),避免本地磁盘故障导致数据丢失:
rsync -avz /var/opt/gitlab/backups/ user@remote-server-ip:/remote/backups/
可将此命令添加到crontab中,与本地备份同步执行。
通过gitlab_rails['backup_keep_time']配置项设置备份保留时间(单位:秒),例如保留30天:
gitlab_rails['backup_keep_time'] = 30 * 24 * 60 * 60 # 30天
修改后运行sudo gitlab-ctl reconfigure,GitLab会自动清理过期备份。
unicorn(应用服务器)、sidekiq(后台任务处理器)等服务:sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
若需彻底隔离数据,可同时停止nginx(Web服务器)。1700000000_2025-03-17_15.0.0_gitlab_backup.tar)复制到备份路径(如/var/opt/gitlab/backups)。BACKUP参数指定备份文件的时间戳(即文件名中的TIMESTAMP部分):sudo gitlab-rake gitlab:backup:restore BACKUP=1700000000
执行后会提示“是否覆盖现有数据”,输入yes确认。sudo gitlab-ctl start
或逐一启动:sudo gitlab-ctl start unicorn && sudo gitlab-ctl start sidekiq && sudo gitlab-ctl start nginx。恢复时,GitLab版本必须与备份时的版本一致或更高(如备份时为15.0.0,恢复时可使用15.0.x或15.1.x)。若版本不匹配,需先升级/降级GitLab至对应版本,再进行恢复。
ls -l /var/opt/gitlab/backups定期检查备份文件是否存在,通过du -sh /var/opt/gitlab/backups监控备份文件大小,避免磁盘空间耗尽。