Linux GitLab 备份与恢复实操指南
一 备份
sudo gitlab-backup create(等效于 sudo gitlab-rake gitlab:backup:create),备份默认生成在 /var/opt/gitlab/backups/,文件名形如 1750765308_2025_06_24_16.7.6_gitlab_backup.tar。建议同时备份配置文件:sudo tar -cf gitlab_conf.tar /etc/gitlab。gitlab_rails['manage_backup_path'] = truegitlab_rails['backup_path'] = "/data/gitlab-backups"gitlab_rails['backup_archive_permissions'] = 0644gitlab_rails['backup_keep_time'] = 604800(保留 7 天,单位为秒)sudo gitlab-ctl reconfigure。0 2 * * * /opt/gitlab/bin/gitlab-backup create(如用 rake,可用 /opt/gitlab/bin/gitlab-rake gitlab:backup:create)。scp 或 rsync 将备份文件自动拷贝到备份服务器,建议基于 SSH 免密登录实现无人值守。二 恢复
sudo gitlab-rake gitlab:env:info | grep "GitLab version"。sudo gitlab-ctl stop puma 与 sudo gitlab-ctl stop sidekiq(如为旧版本,可能是 unicorn 而非 puma)。sudo gitlab-backup restore BACKUP=1750765308_2025_06_24_16.7.6(仅填时间戳前缀,不要带 _gitlab_backup.tar 后缀)。过程中会提示确认,输入 yes 继续。sudo gitlab-ctl start;检查状态:sudo gitlab-ctl status。Web 登录验证项目、用户、权限是否恢复;必要时执行 sudo gitlab-rake gitlab:check SANITIZE=true 做一致性检查。gitlab-ctl reconfigure;恢复完成后再 reconfigure 一次以确保组件注册正确。三 常见问题与处理
ERROR: must be owner of extension pg_trgm 或 btree_gist。处理:
sudo gitlab-psql,执行 DROP EXTENSION IF EXISTS pg_trgm; DROP EXTENSION IF EXISTS btree_gist; \q,再重新恢复;或在支持的版本中 ALTER EXTENSION ... OWNER TO gitlab;。恢复后可按需重建扩展:CREATE EXTENSION pg_trgm; CREATE EXTENSION btree_gist;。sudo gitlab-ctl stop 全停后再恢复。sudo gitlab-ctl restart。gitlab_rails['backup_keep_time'] 控制保留天数,避免磁盘被占满。四 实用脚本与自动化
#!/usr/bin/env bash
BACKUP_DIR="/var/opt/gitlab/backups"
LOG="$BACKUP_DIR/backup_$(date +%F).log"
echo "[$(date)] 开始备份" >> "$LOG"
/opt/gitlab/bin/gitlab-backup create CRON=1 >> "$LOG" 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] 备份成功" >> "$LOG"
else
echo "[$(date)] 备份失败" >> "$LOG"
fi
# 清理7天前
find "$BACKUP_DIR" -name "*.tar" -mtime +7 -delete
0 2 * * * /usr/bin/bash /path/to/backup.sh。scp 到备份机,并在备份机按天数清理旧文件,适合灾备。五 关键注意事项
gitlab-backup create;gitlab-rake gitlab:backup:create 仍可用。gitlab_rails['backup_path'] 并 gitlab-ctl reconfigure;确保运行 GitLab 的用户对目录有读写权限。