温馨提示×

centos gitlab备份与恢复技巧

小樊
50
2025-09-17 18:29:54
栏目: 智能运维

CentOS GitLab备份与恢复技巧

一、备份技巧

1. 手动备份(全量)

使用gitlab-rake命令创建全量备份,包含Git仓库、数据库、用户/组、权限等所有关键数据,默认存储在/var/opt/gitlab/backups目录。命令:
sudo gitlab-rake gitlab:backup:create
备份文件命名格式为TIMESTAMP_gitlab_backup.tar(如1713350400_gitlab_backup.tar),便于按时间识别。

2. 配置备份路径与权限

若需修改默认备份路径,编辑/etc/gitlab/gitlab.rb文件,添加:
gitlab_rails['backup_path'] = "/mnt/backups"(自定义路径需存在且有写入权限)
同时可设置备份文件权限(如gitlab_rails['backup_archive_permissions'] = 0644)和保留时间(如gitlab_rails['backup_keep_time'] = 604800,单位:秒,此处为7天)。修改后需执行sudo gitlab-ctl reconfigure使配置生效。

3. 自动化定时备份

通过crontab设置定时任务,实现每日自动备份。例如,每天凌晨2点执行备份:
crontab -e → 添加行:0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
建议将备份脚本(包含备份与压缩逻辑)加入定时任务,提升自动化程度。

4. 远程备份(增强安全性)

将本地备份文件同步至远程服务器(如通过rsync),避免本地磁盘故障导致数据丢失。示例脚本(auto_backup_to_remote.sh):

#!/bin/bash
LocalBackDir=/var/opt/gitlab/backups
RemoteBackDir=root@192.168.1.100:/remote/gitlab_backups
find $LocalBackDir -type f -mmin -60 -name '*.tar*' | while read file; do
    scp "$file" "$RemoteBackDir"
done

添加定时任务(每天凌晨0点执行):0 0 * * * /root/auto_backup_to_remote.sh
远程服务器需配置SSH免密登录(通过authorized_keys),确保同步无需手动输入密码。

5. 备份文件管理

定期清理过期备份,节省存储空间。例如,删除/var/opt/gitlab/backups目录下超过30天的备份文件:
find /var/opt/gitlab/backups -type f -mtime +30 -name '*.tar*' -exec rm -rf {} \;
可将此命令加入定时任务(如每天凌晨1点执行),实现自动清理。

二、恢复技巧

1. 准备工作

  • 停止相关服务:恢复前需停止GitLab的unicorn(Web服务)和sidekiq(后台任务)进程,确保数据一致性:
    sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq
  • 备份文件校验:确认备份文件完整(可通过ls -lh查看大小,或tar -tzf尝试解压),避免恢复失败。

2. 恢复流程

  • 放置备份文件:将备份文件(如1713350400_gitlab_backup.tar)复制到备份目录(默认/var/opt/gitlab/backups):
    cp /remote/gitlab_backups/1713350400_gitlab_backup.tar /var/opt/gitlab/backups/
  • 执行恢复命令:使用gitlab-rake恢复指定备份(BACKUP参数为备份文件的时间戳部分):
    sudo gitlab-rake gitlab:backup:restore BACKUP=1713350400
    执行后会提示“是否覆盖现有数据”,输入yes确认。
  • 启动GitLab服务:恢复完成后,启动GitLab所有服务:
    sudo gitlab-ctl start
    或重启服务:sudo gitlab-ctl restart

3. 配置文件恢复

备份文件不包含/etc/gitlab/gitlab.rb(配置文件)和/etc/gitlab/gitlab-secrets.json(密钥文件),需手动备份这些文件(恢复前复制至安全位置),并在恢复后将其放回原路径,然后执行sudo gitlab-ctl reconfigure重新加载配置。

三、关键注意事项

  • 版本一致性:恢复时GitLab版本需与备份时一致(或更高版本,如15.0无法恢复16.0的备份),否则会提示版本不匹配错误。可通过gitlab-rake gitlab:env:info查看当前版本。
  • 敏感信息安全:备份文件包含用户代码、密码等敏感信息,需存储在加密或受限访问的位置(如远程服务器启用防火墙、SSH密钥认证)。
  • 定期测试恢复:每季度至少测试一次恢复流程(如选择30天前的备份恢复至测试环境),验证备份文件的可用性,避免灾难发生时无法恢复。

0