温馨提示×

ubuntu gitlab如何进行数据恢复

小樊
48
2025-12-20 18:41:30
栏目: 智能运维

Ubuntu 上 GitLab 数据恢复实操指南

一 恢复前准备

  • 安装与备份时相同版本的 GitLab Omnibus(或更高小版本),并执行一次 gitlab-ctl reconfigure 生成必要目录结构。备份包默认位于 /var/opt/gitlab/backups,可在 /etc/gitlab/gitlab.rb 中通过 gitlab_rails[‘backup_path’] 自定义。恢复时必须将备份文件放到该目录并修正属主为 git:git。注意:备份 Rake 任务不包含配置文件与密钥,务必另行备份并妥善保存 /etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json。若使用 PgBouncer,恢复时需增加相应参数。以上为恢复能否成功的关键前提。

二 标准恢复步骤 Omnibus 包

  1. 将备份文件(如:1682662281_2023_04_28_15.10.2_gitlab_backup.tar)复制到 /var/opt/gitlab/backups,并修正权限:
    • chown git:git /var/opt/gitlab/backups/1682662281_2023_04_28_15.10.2_gitlab_backup.tar
  2. 为保数据一致性,停止相关服务(不同版本进程名略有差异,建议按实际环境停止):
    • gitlab-ctl stop puma
    • gitlab-ctl stop sidekiq
  3. 执行恢复(BACKUP 只填时间戳前缀,不含 “_gitlab_backup.tar”):
    • gitlab-backup restore BACKUP=1682662281_2023_04_28_15.10.2
  4. 启动服务并重建配置:
    • gitlab-ctl start
    • gitlab-ctl reconfigure
  5. 自检与完整性校验:
    • gitlab-rake gitlab:check SANITIZE=true
    • 可按需检查:gitlab-rake gitlab:artifacts:check、gitlab-rake gitlab:lfs:check、gitlab-rake gitlab:uploads:check
  6. 如曾自定义备份保留时间,可在 gitlab.rb 中设置 gitlab_rails[‘backup_keep_time’](单位:秒)以便后续自动清理。

三 无备份或仅仓库盘可用的应急恢复

  • 适用场景:服务器崩溃但数据盘(含 /var/opt/gitlab/git-data)仍可挂载读取。思路是直接从仓库目录将各项目裸仓库拷出或克隆出来。
  • 操作步骤:
    1. 挂载原数据盘到新主机(示例):mount /dev/sdX /mnt/data
    2. 将仓库目录拷贝到恢复目录:cp -r /mnt/data/var/opt/gitlab/git-data /mnt/recovery/
    3. 项目仓库位于 git-data/repositories/@hashed/,目录名为哈希。进入具体仓库目录,从 config 文件中可看到项目的 owner/project 信息。
    4. 为避免 Git 安全目录限制,先将该仓库标记为安全目录,再克隆到本地目标路径:
      • git config --global --add safe.directory /mnt/recovery/repositories/@hashed/73/47/73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049.git
      • git clone /mnt/recovery/repositories/@hashed/73/47/73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049.git your_clone_dir/author/project_name
    5. 对需要的仓库批量执行上述克隆操作,即可快速恢复代码资产。此方法不涉及数据库与用户权限,适合“只要代码”的紧急取回。

四 常见问题与排查

  • 版本不匹配导致恢复失败:恢复环境的 GitLab 版本需与备份时一致或更高(小版本可向前兼容,建议一致)。若不一致,先安装指定版本再恢复。
  • 权限问题:备份文件或 backups 目录属主不是 git 会导致恢复失败,恢复前务必 chown git:git。
  • 配置文件与密钥未恢复:备份 Rake 任务不包含 /etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json,恢复后请手动放回并重新配置,否则可能出现 500/502 或加密数据不可用。
  • 服务未停干净:部分进程(如 puma/sidekiq/unicorn)未停止会造成数据一致性问题,恢复前确保相关服务已停止。
  • 仓库盘挂载异常:应急恢复依赖能读取 git-data,若挂载异常或目录缺失,将无法从该路径提取仓库。

0