在前面介绍的文章中已经提到,GitLab的备份和恢复需要保证源和目的的GitLab版本一致,如果不同版本之间如何做呢?这篇文章整理和记录一下容器化方式下GitLab-ce 11.2.3的数据恢复至GitLab 12.10.5的方法。

整体思路

仍然按照GitLab官方建议,按照如下三步进行恢复:
步骤1: 目的端拉起相同版本的GitLab
步骤2: 恢复数据导
步骤3: 使用相同数据卷重建GitLab服务

事前准备

事前准备了如下版本的GitLab备份文件, 从中可以看到为11.2.3版本的数据

liumiaocn:gitlab liumiao$ ls 1597959631_2020_08_20_11.2.3_gitlab_backup.tar
1597959631_2020_08_20_11.2.3_gitlab_backup.tar
liumiaocn:gitlab liumiao$

步骤1: 目的端拉起相同版本的GitLab

拉起如下GitLab 11.2.3版本的服务,使用如下docker-compose.yml即可

liumiaocn:gitlab liumiao$ cat docker-compose.yml
version: '2'
services:# Version Control service: Gitlabgitlab:image: gitlab/gitlab-ce:11.2.3-ce.0ports:- "32001:80"- "30022:22"- "30443:443"volumes:- ./log/:/var/log/gitlab- ./data/:/var/opt/gitlab- ./conf/:/etc/gitlabrestart: "no"
liumiaocn:gitlab liumiao$

登录之后确认版本信息如下所示:

步骤2: 恢复数据导

  • 拷贝数据至GitLab容器之中
liumiaocn:gitlab liumiao$ docker cp 1597959631_2020_08_20_11.2.3_gitlab_backup.tar gitlab_gitlab_1:/var/opt/gitlab/backups
liumiaocn:gitlab liumiao$
  • 确认文件与设定权限
liumiaocn:gitlab liumiao$ docker exec -it gitlab_gitlab_1 sh
# cd /var/opt/gitlab/backups
# ls -l
total 213952
-rw------- 1 501 dialout 207134720 Aug 20 22:07 1597959631_2020_08_20_11.2.3_gitlab_backup.tar
#
# chmod 644 1597959631_2020_08_20_11.2.3_gitlab_backup.tar
# ls -l
total 213952
-rw-r--r-- 1 501 dialout 207134720 Aug 20 22:07 1597959631_2020_08_20_11.2.3_gitlab_backup.tar
#
  • 恢复数据

高版本的GitLab可直接使用gitlab-backup进行备份与恢复,详细可参看:

  • https://blog.csdn.net/liumiaocn/article/details/107952592
# gitlab-rake gitlab:backup:restore BACKUP=1597959631_2020_08_20_11.2.3
Unpacking backup ... done
Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.Do you want to continue (yes/no)? yes
Removing all tables. Press `Ctrl-C` within 5 seconds to abort
Cleaning the database ...
done
Restoring database ...
Restoring PostgreSQL database gitlabhq_production ... SET
SET
SET
SET
SETset_config
------------(1 row)SET
SET
SET
ERROR:  relation "public.timelogs" does not exist
...省略
[DONE]
done
Restoring repositories ...
...省略
done
Restoring uploads ...
done
Restoring builds ...
done
Restoring artifacts ...
done
Restoring pages ...
done
Restoring lfs objects ...
done
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yesDeleting tmp directories ... done
done
done
done
done
done
done
done
#

然后登录GitLab验证,酒客发现已经恢复成功了,但是此时版本仍然是:

步骤3: 使用相同数据卷重建GitLab服务

  • 停止并删除当前GitLab容器
liumiaocn:gitlab liumiao$ docker-compose down
Stopping gitlab_gitlab_1 ... done
Removing gitlab_gitlab_1 ... done
Removing network gitlab_default
liumiaocn:gitlab liumiao$

注意:此步骤具有风险性,如果事前有手动在容器中的修改,删除会连同此部分修改一同实施

  • 在同样的位置,利用之前的数据卷,拉起新的GitLab 12.10.5的服务
liumiaocn:gitlab liumiao$ vi docker-compose.yml
liumiaocn:gitlab liumiao$ cat docker-compose.yml
version: '2'
services:# Version Control service: Gitlabgitlab:image: gitlab/gitlab-ce:12.10.5-ce.0ports:- "32001:80"- "30022:22"- "30443:443"volumes:- ./log/:/var/log/gitlab- ./data/:/var/opt/gitlab- ./conf/:/etc/gitlabrestart: "no"
liumiaocn:gitlab liumiao$
liumiaocn:gitlab liumiao$ docker-compose up -d
Creating network "gitlab_default" with the default driver
Creating gitlab_gitlab_1 ... done
liumiaocn:gitlab liumiao$

结果发现需要中间升级至11.11.0,详细参看 升级问题对应,将版本改为11.11.0,重新拉起服务,发现已经正常升级至11.11.0了

再次修改镜像版本,重新启动GitLab服务

liumiaocn:gitlab liumiao$ vi docker-compose.yml
liumiaocn:gitlab liumiao$ cat docker-compose.yml
version: '2'
services:# Version Control service: Gitlabgitlab:image: gitlab/gitlab-ce:12.10.5-ce.0ports:- "32001:80"- "30022:22"- "30443:443"volumes:- ./log/:/var/log/gitlab- ./data/:/var/opt/gitlab- ./conf/:/etc/gitlabrestart: "no"
liumiaocn:gitlab liumiao$ docker-compose up -d
Recreating gitlab_gitlab_1 ... done
liumiaocn:gitlab liumiao$

重新启动之后发现已经正常升级至目标版本12.10.5了

升级问题对应

在步骤3中,重新拉起时出现了如下错误,相同的数据卷,从11.2.3换成了12.10.5,发现服务没有能够拉起来。

liumiaocn:gitlab liumiao$ docker-compose psName             Command       State    Ports
--------------------------------------------------
gitlab_gitlab_1   /assets/wrapper   Exit 1
liumiaocn:gitlab liumiao$

进一步确认日志信息发现如下内容

gitlab_1  |     ================================================================================
gitlab_1  |     Error executing action `run` on resource 'bash[migrate gitlab-rails database]'
gitlab_1  |     ================================================================================
gitlab_1  |
gitlab_1  |     Mixlib::ShellOut::ShellCommandFailed
gitlab_1  |     ------------------------------------
gitlab_1  |     Expected process to exit with [0], but received '1'
gitlab_1  |     ---- Begin output of "bash"  "/tmp/chef-script20200820-25-1llav8e" ----
gitlab_1  |     STDOUT: rake aborted!
gitlab_1  |     Your current database version is too old to be migrated. You should upgrade to GitLab 11.11.0 before moving to this version. Please see https://docs.gitlab.com/ee/policy/maintenance.html#upgrade-recommendations
gitlab_1  |     /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/migrate/schema_check.rake:13:in `block in <top (required)>'
gitlab_1  |     /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:49:in `block (3 levels) in <top (required)>'
gitlab_1  |     /opt/gitlab/embedded/bin/bundle:23:in `load'
gitlab_1  |     /opt/gitlab/embedded/bin/bundle:23:in `<main>'
gitlab_1  |     Tasks: TOP => db:migrate => schema_version_check
gitlab_1  |     (See full trace by running task with --trace)
gitlab_1  |     STDERR:
gitlab_1  |     ---- End output of "bash"  "/tmp/chef-script20200820-25-1llav8e" ----
gitlab_1  |     Ran "bash"  "/tmp/chef-script20200820-25-1llav8e" returned 1
gitlab_1  |
gitlab_1  |     Resource Declaration:
gitlab_1  |     ---------------------
gitlab_1  |     # In /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb
gitlab_1  |
gitlab_1  |      54: bash "migrate gitlab-rails database" do
gitlab_1  |      55:   code <<-EOH
gitlab_1  |      56:     set -e
gitlab_1  |      57:     log_file="#{node['gitlab']['gitlab-rails']['log_directory']}/gitlab-rails-db-migrate-$(date +%Y-%m-%d-%H-%M-%S).log"
gitlab_1  |      58:     umask 077
gitlab_1  |      59:     /opt/gitlab/bin/gitlab-rake gitlab:db:configure 2>& 1 | tee ${log_file}
gitlab_1  |      60:     STATUS=${PIPESTATUS[0]}
gitlab_1  |      61:     chown #{account_helper.gitlab_user}:#{account_helper.gitlab_group} ${log_file}
gitlab_1  |      62:     echo $STATUS > #{db_migrate_status_file}
gitlab_1  |      63:     exit $STATUS
gitlab_1  |      64:   EOH
gitlab_1  |      65:   environment env_variables unless env_variables.empty?
gitlab_1  |      66:   notifies :run, "execute[clear the gitlab-rails cache]", :immediately
gitlab_1  |      67:   dependent_services.each do |svc|
gitlab_1  |      68:     notifies :restart, svc, :immediately
gitlab_1  |      69:   end
gitlab_1  |      70:   not_if "(test -f #{db_migrate_status_file}) && (cat #{db_migrate_status_file} | grep -Fx 0)"
gitlab_1  |      71:   only_if { node['gitlab']['gitlab-rails']['auto_migrate'] }
gitlab_1  |      72: end
gitlab_1  |      73:
...
gitlab_1  | Your current database version is too old to be migrated. You should upgrade to GitLab 11.11.0 before moving to this version. Please see https://docs.gitlab.com/ee/policy/maintenance.html#upgrade-recommendations
...省略

根据提示可以看到GitLab升级的时候不是一蹴而就的,可能需要多级跳,比如此处本来希望从11.2.3升级至12.10.5,需要先升到11.11.0,然后再升级,详细可参看如下说明:

修改版本至11.11.0之后,拉起服务,执行日志如下所示

liumiaocn:gitlab liumiao$ vi docker-compose.yml
liumiaocn:gitlab liumiao$ cat docker-compose.yml
version: '2'
services:# Version Control service: Gitlabgitlab:image: gitlab/gitlab-ce:11.11.0-ce.0ports:- "32001:80"- "30022:22"- "30443:443"volumes:- ./log/:/var/log/gitlab- ./data/:/var/opt/gitlab- ./conf/:/etc/gitlabrestart: "no"
liumiaocn:gitlab liumiao$ docker-compose up -d
Pulling gitlab (gitlab/gitlab-ce:11.11.0-ce.0)...
...省略
Status: Downloaded newer image for gitlab/gitlab-ce:11.11.0-ce.0
Recreating gitlab_gitlab_1 ... done
liumiaocn:gitlab liumiao$

可以通过docker-compose logs -f显示的日志确认是否正常结束,然后查看到如下正常的状态信息了

liumiaocn:gitlab liumiao$ docker-compose psName             Command          State                                      Ports
-----------------------------------------------------------------------------------------------------------------------
gitlab_gitlab_1   /assets/wrapper   Up (healthy)   0.0.0.0:30022->22/tcp, 0.0.0.0:30443->443/tcp, 0.0.0.0:32001->80/tcp
liumiaocn:gitlab liumiao$

参考文件

https://docs.gitlab.com/ee/policy/maintenance.html#upgrade-recommendations

GitLab基础:如何将备份恢复至更高版本的GitLab相关推荐

  1. PostgreSQL 14及更高版本改进

    PostgreSQL 14及更高版本 本文谈谈PG14中的关键特性及社区中正在谈论PG15及更高版本的内容. PG14的主要特性 逻辑复制的改进 PG14中对逻辑复制进行了几项增强: 1) 正在进行中 ...

  2. Dubbo 高危反序列化漏洞,存在远程代码执行风险,建议及时升级到2.7.7或更高版本!...

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 以下内容转载自安全客,原文链接:https://www. ...

  3. java6 已安装更高版本_Java 10及更高版本的思考

    java6 已安装更高版本 大家好 Java 10于2018年3月20日发布.我认为许多软件团队将阻止升级. 从Java 8到Java 9的专业人员人数可能还更少.为什么会这样,原因是传统的障碍以及对 ...

  4. Java 10及更高版本的思考

    大家好 Java 10于2018年3月20日发布.我认为许多软件团队将阻止升级. 从Java 8到Java 9的专业人员人数可能还更少.为什么会这样,原因是传统的障碍以及对应用程序服务器,框架甚至是云 ...

  5. dedecms php_织梦DedeCMS更新了,支持更高版本PHP

    据最新消息了解到,织梦程序在7月26日进行了更新,都更新了哪些功能?一起来看一看. 在织梦后台更新获得到的更新列表如下: 可以看出,此次更新主要是针对PHP版本支持做了调整.简单来说织梦CMS支持更高 ...

  6. IDEA报错解决:Error:(33, 35) java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    晚上在用IDEA的时候遇到了报错: Error:(33, 35) java: -source 7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式) ...

  7. System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本?

    System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本? 环境: Win XP SP2+Oracle 10 g+VS 2005 错误:System.D ...

  8. oracle 12 问题:需要 Oracle 客户端软件 8.1.7 或更高版本

    环境:win server 2008 r2 oracle 12C 错误提示: System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---&g ...

  9. 棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...

    棉花糖多少钱 In Android 5.x and below, accessing your list of running apps was simple-you'd jump into Sett ...

最新文章

  1. python列表中的冒号_python 列表中[ ]中冒号‘:’的作用
  2. 复现经典:《统计学习方法》​第 11 章 条件随机场
  3. 中国连续十年成马来西亚最大贸易伙伴
  4. 【Python CheckiO 题解】Between Markers (simplified)
  5. jQuery的操作css的几种方法和位置,尺寸以及scrolltop方法
  6. MongoDB学习之在Linux下安装MongoDB
  7. 一维数组所有元素是否大于_【C语言】- 指向一维数组元素的指针!你今天学习了吗?...
  8. api获取控件窗口的矩形大小_DevExpress 通用控件系列(4):SimpleButton
  9. 给不懂技术的妹子,说清楚单列模式
  10. 大前端课程学习心得体会+学习笔记
  11. 12306验证码识别初尝试(1)
  12. stm32(十八)TFT-LCD
  13. both methods have same erasure, yet neither overrides the other
  14. hive ddl语法使用详解
  15. 下载安装eiigui工具
  16. 2021AAPM大赛第一名技术报告Designing an Iterative Network for Fanbeam-CTwith Unknown Geometry 阅读笔记
  17. 中国人必须知道的76个常识
  18. 冰川融化的手工香皂:感想
  19. 2023年制造业产品经理NPDP认证报名入口及指南
  20. Nextchip,信息大全,QQ:87219158

热门文章

  1. 江苏计算机电缆报价,江苏价格低的阻燃计算机电缆
  2. python美化excel_Python 使用 prettytable 库打印表格(美化输出)
  3. 推荐用于环境识别的机器人摄像头
  4. 【我想对策划说的事】-- 入职dy一年后被邀请召开的扯淡分享会讲稿
  5. 推荐一个日历转换开源工具库,支持C#、Java、PHP等主流的语言
  6. 字符串的子串计算方法
  7. windows系统下自定义图标
  8. 《Python Excel 教程》
  9. 如何搭建Telegram群机器人
  10. DELMIA软件:机器人工作区运动包络功能介绍与创建方法