如何在Linux上使用GitLab进行数据迁移
导读:Linux 上 GitLab 数据迁移实操指南 一 迁移准备与版本要求 保持版本一致:新旧服务器的 GitLab 版本号需完全一致(包括 CE/EE 与补丁号)。查看版本可用命令:gitlab-rake gitlab:env:info 或...
Linux 上 GitLab 数据迁移实操指南
一 迁移准备与版本要求
- 保持版本一致:新旧服务器的 GitLab 版本号需完全一致(包括 CE/EE 与补丁号)。查看版本可用命令:
gitlab-rake gitlab:env:info或cat /opt/gitlab/embedded/service/gitlab-rails/VERSION。不一致易导致恢复失败或数据不一致。 - 规划停机窗口:使用官方备份/恢复方式迁移时,恢复阶段会清理现有数据,需安排短暂停机。
- 备份敏感配置:除数据备份外,务必单独备份 /etc/gitlab/gitlab.rb 与 /etc/gitlab/gitlab-secrets.json,它们包含外部 URL、SMTP、LDAP、Runner 注册令牌等敏感信息,迁移后直接复用更安全。
- 目录与权限:备份包默认位于 /var/opt/gitlab/backups,属主应为 git:git;恢复前确保权限正确。
二 标准迁移步骤(同版本,推荐)
- 旧服务器备份
- 执行备份:
sudo gitlab-rake gitlab:backup:create(备份文件生成于 /var/opt/gitlab/backups,命名如 TIMESTAMP_gitlab_backup.tar 或 TIMESTAMP_YYYY_MM_DD_VERSION_gitlab_backup.tar)。 - 备份配置文件:
sudo cp -a /etc/gitlab/{ gitlab.rb,gitlab-secrets.json} /path/to/safe/place/。
- 执行备份:
- 传输备份与配置到新服务器
- 备份包:
scp /var/opt/gitlab/backups/xxx.tar root@new:/var/opt/gitlab/backups/。 - 配置文件:
scp /path/to/safe/place/{ gitlab.rb,gitlab-secrets.json} root@new:/etc/gitlab/。
- 备份包:
- 新服务器安装同版本 GitLab
- 使用与你旧环境一致的 CE/EE 与版本号安装(RPM/DEB 或 Omnibus 方式均可)。
- 新服务器恢复
- 设置权限:
sudo chown git:git /var/opt/gitlab/backups/xxx.tar。 - 停止写入服务:
sudo gitlab-ctl stop unicorn & & sudo gitlab-ctl stop sidekiq。 - 执行恢复:
- 若备份名为 1666142751_2022_10_19_13.6.7_gitlab_backup.tar,可用时间戳部分:
sudo gitlab-rake gitlab:backup:restore BACKUP=1666142751; - 若恢复提示找不到文件,按提示将文件重命名为仅含时间戳的 .tar 再恢复;
- 恢复过程会出现两次确认,均输入 yes。
- 若备份名为 1666142751_2022_10_19_13.6.7_gitlab_backup.tar,可用时间戳部分:
- 启动服务:
sudo gitlab-ctl start。
- 设置权限:
- 校验
- 访问 external_url,登录检查项目、仓库、Issues、Runner、Webhooks、LFS/附件等是否完整。
三 常见问题与处理
- 恢复时报错 “must be owner of extension pg_trgm/btree_gist”
- 原因:内置 PostgreSQL 的扩展属主与恢复用户不匹配。
- 处理(Omnibus 内置 PG):
sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -h 127.0.0.1 -d gitlabhq_production- 执行:
ALTER USER gitlab WITH SUPERUSER;(恢复完成可按需改回)。
- 备份包权限不足或找不到
- 确保备份包在 /var/opt/gitlab/backups 且属主为 git:git,必要时
chown git:git xxx.tar;若恢复提示找不到,按提示将文件重命名为仅含时间戳的 .tar 再恢复。
- 确保备份包在 /var/opt/gitlab/backups 且属主为 git:git,必要时
- 页面异常(如 500、Runner 注册异常、Web IDE 打不开)
- 多因 gitlab-secrets.json 未正确迁移或 Runner 注册令牌残留。确保复用旧 gitlab-secrets.json;必要时在 Rails 控制台清理相关令牌后再试。
- 版本不一致导致恢复失败
- 新服务器必须安装与旧服务器一致的 GitLab 版本(含小版本)后再恢复。
四 进阶场景与建议
- 跨安装方式迁移(如 RPM/DEB ↔ Docker)
- 思路一致:在源环境用
gitlab-rake gitlab:backup:create生成备份,将备份文件与 gitlab.rb/gitlab-secrets.json 复制到目标环境对应位置后执行恢复;Docker 场景需进入容器执行 rake 或确保挂载目录正确。
- 思路一致:在源环境用
- 仅迁移部分项目或仓库
- 若不是整实例迁移,可在新实例创建空项目后,使用
git push --mirror或项目导出/导入功能逐项目迁移,以保留提交历史与分支。
- 若不是整实例迁移,可在新实例创建空项目后,使用
- 大版本升级与迁移
- 建议先同版本迁移到新环境,再按官方升级路径逐步升级;跨大版本直接恢复成功率低且风险高。
- 迁移后检查清单
- 校验 external_url、SSH 端口、SMTP/LDAP、对象存储(如有)、Runner 注册与作业执行、LFS 与附件、Pages、Webhooks、系统钩子、项目/组/实例级变量等。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Linux上使用GitLab进行数据迁移
本文地址: https://pptw.com/jishu/780022.html
