GitLab备份恢复操作流程:

1.确认新旧服务器gitlab版本号是否一致
2.升级旧git服务器版本
3.备份git
4.恢复备份

确认Git版本号

[root@localhost ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
15.10.1
[root@localhost ~]# 

务必确认新旧服务器版本号保持一致
务必确认版本号绝对一致,如不一致,备份文件无法使用,需要搭建一样的环境方能使用

升级旧Git服务器版本

Centos以及其他主流操作系统用户可以直接加载Gitlab官方的仓库:

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

#龙蜥anolisos之类的小众系统可以通过写死系统和版本号来更新。
wget  https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh 
vim script.rpm.sh
#修改OS变量和VERSION_ID变量,然后本地执行./script.rpm.sh 
#加载完仓库以后,yum makechche生成缓存方便后面使用。

升级版本

查询升级线路https://docs.gitlab.com/ee/update/index.html#upgrade-paths
无法跨版本升级,必需参考官方的升级线路逐级升级。
升级版本yum install gitlab-ce-<version>

生成备份文件

gitlab-rake gitlab:backup:create

备份完成后,另外需要备份/etc/gitlab目录下的gitlab.rb和gitlab-secrets.json两个文件备用,切记!

进入/var/opt/gitlab/backups/ 将备份文件下载到本地,或者通过scp命令直接上传到新服务器。

恢复Git

先停止新Git服务器的数据库连接,防止意外写入

[root@localhost ~]# gitlab-ctl stop unicorn 
[root@localhost ~]# gitlab-ctl stop sidekiq
[root@localhost ~]# gitlab-rake gitlab:backup:restore BACKUP=168011111_2023_04_04_15.0.1
#会提示是否覆盖数据以及key,分别按照提示输入两个yes

恢复后后台以及部分页面500处理

git恢复后,管理员后台会有部分页面报错,恢复以后新建的项目可以正常删除,但是备份之前已经存在的项目删除会报错500。
该问题主要是因为在恢复时候有个报错如果不注意就过去了。

Restoring PostgreSQL database gitlabhq_production ... 
ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

解决办法:

[root@localhost ~]# vim /var/opt/gitlab/postgresql/data/postgresql.conf
listen_addresses = ‘*’

[root@localhost ~]#  vim /var/opt/gitlab/postgresql/data/pg_hba.conf
local   all         all                               trust
host    all         all                               127.0.0.1/32 trust
# 最下面新增两行

#上传先前备份的gitlab-secrets.json,然后重启Gitlab
#重启Gitlab
[root@localhost ~]#  gitlab-ctl restart

如果没备份gitlab-secrets.json文件按照下面办法重置token

#重置CI的密钥和token
[root@localhost ~]#  gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
[root@localhost ~]#  gitlab-rails dbconsole
-- Clear project tokens UPDATE projects SET runners_token = null, runners_token_encrypted = null;
-- Clear group tokens UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
-- Clear instance tokens UPDATE application_settings SET runners_registration_token_encrypted = null;

#重启Gitlab
[root@localhost ~]#  gitlab-ctl restart 



最后修改:2023 年 04 月 11 日
如果觉得我的文章对你有用,请随意赞赏