You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署的GitLab CE升级14.2.x时数据库迁移失败问题求助

GitLab CE Docker版14.0.x升级14.2.x迁移失败解决方案

前置操作

操作前必须完整备份GitLab所有挂载卷(配置、数据、日志目录),避免数据损坏

  1. 回滚到可正常运行的14.0.7版本容器,确保服务正常启动、数据无异常
  2. 进入容器后先检查所有未完成的后台迁移任务:
# 替换<your-gitlab-container-name>为实际的GitLab容器名称
docker exec -it <your-gitlab-container-name> gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'

如果返回结果大于0,等待所有常规后台迁移执行完成,再继续下一步。
3. 查看批量后台迁移任务状态:

docker exec -it <your-gitlab-container-name> gitlab-rake gitlab:background_migrations:status

确认CopyColumnUsingBackgroundMigrationJob对应ci_job_artifacts表的任务状态为活跃/卡住状态。


方案一:正确执行手动终结迁移命令

日志提示的命令默认存在shell转义问题,Docker环境下需使用调整后的命令:

docker exec -it <your-gitlab-container-name> gitlab-rake "gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_job_artifacts,id,'[[\"id\", \"job_id\"],[\"id_convert_to_bigint\", \"job_id_convert_to_bigint\"]]']"

命令执行完成后,再次运行迁移状态检查命令,确认对应任务状态变为finished,之后执行:

docker exec -it <your-gitlab-container-name> gitlab-ctl reconfigure

确认无报错后,停止14.0.7容器,启动14.2.1版本容器完成升级即可。


方案二:手动标记迁移完成(仅方案一失效时使用)

如果方案一执行后任务仍未标记为完成,可进入Rails控制台手动修改任务状态:

  1. 进入Rails控制台
docker exec -it <your-gitlab-container-name> gitlab-rails console
  1. 执行以下命令修改迁移状态:
migration = Gitlab::Database::BackgroundMigration::BatchedMigration.find_for_configuration(
  Gitlab::Database::MAIN_DATABASE_NAME,
  'CopyColumnUsingBackgroundMigrationJob',
  'ci_job_artifacts',
  'id',
  [["id", "job_id"], ["id_convert_to_bigint", "job_id_convert_to_bigint"]]
)
migration.status = 3
migration.save!
  1. 退出控制台后执行gitlab-ctl reconfigure确认无报错,再启动14.2.1版本容器完成升级。

注意事项

  • 升级全程确保服务器内存不低于4G,内存不足会导致迁移任务卡住
  • 升级过程中不要强行终止容器,避免数据库事务异常
  • 如果ci_job_artifacts表数据量过大,手动终结迁移的执行时间会较长,耐心等待命令执行完成即可

内容的提问来源于stack exchange,提问作者Adamwolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:30:01