温馨提示×

Debian下GitLab数据库迁移指南

小樊
32
2025-11-15 14:52:46
栏目: 智能运维

Debian下GitLab数据库迁移指南

一 迁移方式与前置准备

  • 迁移方式选择
    • 整机迁移(推荐):使用 Omnibus 内置备份工具打包仓库、数据库与附件,在新服务器同版本恢复,操作简洁、风险低。备份默认目录为 /var/opt/gitlab/backups。适用于绝大多数场景。
    • 仅数据库迁移:手动导出 PostgreSQL 数据并在新库导入,同时迁移配置与数据目录。适用于更换数据库实例或做架构调整,步骤更复杂、需严格一致性校验。
  • 版本与一致性
    • 建议新旧实例 GitLab 版本完全一致(含小版本/补丁),避免结构差异导致恢复失败或数据不一致。
    • 检查版本:cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
  • 备份工具与命令
    • GitLab 12.2+:使用 gitlab-backup create
    • GitLab 12.1 及更早:使用 gitlab-rake gitlab:backup:create
  • 规划与网络
    • 预估停机时间,选择业务低峰;内网直连传输备份文件可显著提升速度并降低风险。

二 方案一 整机迁移步骤(内置备份恢复)

  • 旧服务器备份
    • 建议先停止写入服务:sudo gitlab-ctl stop puma;sudo gitlab-ctl stop sidekiq
    • 创建备份:sudo gitlab-backup create(12.1 用:sudo gitlab-rake gitlab:backup:create
    • 备份文件位于:/var/opt/gitlab/backups/11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar
  • 传输备份到新服务器
    • scp /var/opt/gitlab/backups/11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar user@new_ip:/var/opt/gitlab/backups/
  • 新服务器恢复
    • 安装与旧服务器 同版本 GitLab(Debian 包管理安装)
    • 确认备份文件属主为 git:git:sudo chown git:git /var/opt/gitlab/backups/*
    • 停止写入服务:sudo gitlab-ctl stop puma;sudo gitlab-ctl stop sidekiq
    • 执行恢复(BACKUP 参数不带 “_gitlab_backup.tar” 后缀):sudo gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
    • 如为 13.1+ 且跨服务器,检查密钥可解密:sudo gitlab-rake gitlab:doctor:secrets
    • 重新配置并启动:sudo gitlab-ctl reconfigure;sudo gitlab-ctl start
  • 验证
    • 登录 Web 检查项目、用户、权限;运行健康检查:sudo gitlab-rake gitlab:check SANITIZE=true
    • 可选完整性校验:sudo gitlab-rake gitlab:artifacts:check;sudo gitlab-rake gitlab:lfs:check;sudo gitlab-rake gitlab:uploads:check

三 方案二 仅数据库迁移步骤(PostgreSQL)

  • 旧库导出
    • 建议停机一致性导出:sudo gitlab-ctl stop puma;sudo gitlab-ctl stop sidekiq
    • 导出:sudo -u postgres pg_dump -d gitlabhq_production > gitlab-backup.sql
  • 新库准备
    • 安装 PostgreSQL(Debian):sudo apt-get update && sudo apt-get install -y postgresql postgresql-contrib
    • 创建库与用户(示例):sudo -u postgres psql
      • CREATE DATABASE gitlabhq_production;
      • CREATE USER gitlab WITH PASSWORD ‘your_password’;
      • GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production TO gitlab;
  • 新库导入
    • psql gitlabhq_production < gitlab-backup.sql
  • 配置与启动
    • 编辑 /etc/gitlab/gitlab.rb,确保数据库指向新库(示例):
      • gitlab_rails[‘db_adapter’] = “postgresql”
      • gitlab_rails[‘db_host’] = “localhost”
      • gitlab_rails[‘db_port’] = 5432
      • gitlab_rails[‘db_username’] = “gitlab”
      • gitlab_rails[‘db_password’] = “your_password”
      • gitlab_rails[‘db_database’] = “gitlabhq_production”
    • 重新配置并启动:sudo gitlab-ctl reconfigure;sudo gitlab-ctl start
  • 校验
    • 访问实例并检查关键功能;必要时运行 gitlab-rake 检查任务(如 artifacts、lfs、uploads)。

四 常见问题与注意事项

  • 版本不一致
    • 不同版本的数据库结构可能不兼容,务必保持 同版本迁移;若需升级,先在原环境升级完成再迁移。
  • secrets 与加密数据
    • 跨服务器恢复时,/etc/gitlab/gitlab-secrets.json 必须一致或在 13.1+gitlab-rake gitlab:doctor:secrets 验证可解密,否则可能导致 CI/CD 变量、Runner 注册、加密配置不可用。
  • 备份与恢复命令差异
    • 12.2+ 使用 gitlab-backup12.1 及更早 使用 gitlab-rake gitlab:backup:create/restore。恢复时 BACKUP 参数不带后缀名。
  • 文件权限与目录
    • 备份文件与数据目录(如 /var/opt/gitlab/backups)属主应为 git:git,否则恢复可能失败。
  • 停机窗口与回滚
    • 迁移前明确停机窗口与回滚方案;整机迁移回滚只需切回旧实例;仅数据库迁移回滚需保留旧库快照与备份。

0