Gitlab数据备份/恢复

本文简单介绍Gitlab的备份/恢复操作。

概述

在个人服务器上通过Docker搭建了Gitlab。今天在Gitlab上创建Group的时候返回了500错误,调试了一段时间问题都没有得到解决。自该容器搭建以来经历了若干升级和意外断电,估计因此出现了问题。

经过考虑之后决定先把Gitlab的数据备份,然后通过重新创建Gitlab容器和数据恢复的办法进行修复。尽管修复的过程出现了一些异常,但总体上还是比较顺利的完成了修复。

下文将简单介绍该过程,但在展开之前有两点务必了解:

  • 在Gitlab出现问题后有可能会导致备份数据失败,务必在备份成功之后再执行后续的操作。
  • 恢复数据成功的前提是Gitlab的版本与备份数据的Gitlab版本相同。

备份

进入Gitlab容器后执行下面命令进行备份。

gitlab-backup create

备份文件会保存在容器的/var/opt/gitlab/backups/目录下以tar文件进行保存,文件名类似:1673231242_2023_01_09_15.5.4_gitlab_backup.tar

然而上面命令只对备份常规数据,用户的敏感数据存储于/etc/gitlab/gitlab-secrets.json以及/etc/gitlab/gitlab.rb,用户【必须】手动进行备份。

恢复数据

在重新创建Gitlab容器后(注意版本需要和备份文件的版本一致),执行下面操作:

配置PostgreSQL

在开始执行恢复之前需要先对PostgreSQL做一些配置,否则在执行恢复的时候可能会出现类似下面的异常报错。

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
  1. 修改/var/opt/gitlab/postgresql/data/postgresql.conf,找到属性listen_addresses,执行配置:
listen_addresses = '*'
  1. 修改/var/opt/gitlab/postgresql/data/pg_hba.conf,在文件最后添加内容:
local   all         all                               trust
host    all         all                               127.0.0.1/32 trust
  1. 重启服务。
gitlab-ctl restart
  1. gitlab设置为超级用户:

这部分的终端的交互内容大致如下:

# su - gitlab-psql
$ /opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production
psql (13.6)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

gitlabhq_production=# ALTER USER gitlab WITH SUPERUSER;
ALTER ROLE
gitlabhq_production=# \q
$ exit
#

上面终端内容的大意大致如下:

  • su - gitlab-psql,切换成用户gitlab-psql
  • /opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production, 打开gitlabhq_production数据库。执行该命令后会打印相应信息并且提示符变成gitlabhq_production=#
  • ALTER USER gitlab WITH SUPERUSER;,把用户gitlab修改为超级用户。
  • \q,退出SQL。
  • exit,退出gitlab-psql用户。

拷贝备份文件

把前面备份的tar文件拷贝到/var/opt/gitlab/backups/;以及把gitlab-secrets.json以及gitlab.rb拷贝到/etc/gitlab,并确保这些文件的权限。

假定已经通过工具(譬如FTP工具)把相应文件上传到容器的/tmp目录下:

mv /tmp/1673231242_2023_01_09_15.5.4_gitlab_backup.tar /var/opt/gitlab/backups/
chown git:git /var/opt/gitlab/backups/1673231242_2023_01_09_15.5.4_gitlab_backup.tar
chmod g-rwx,o-rwx /var/opt/gitlab/backups/1673231242_2023_01_09_15.5.4_gitlab_backup.tar

mv /tmp/gitlab.rb /tmp/gitlab-secrets.json /etc/gitlab/
chown root:root /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab.rb
chmod g-rwx,o-rwx /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab.rb

执行恢复

  1. 停掉unicornsidekiq
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
  1. 执行恢复
gitlab-backup restore force=yes
# 如果/var/opt/gitlab/backups/下有多个备份文件,可以执行下面命令指定恢复的目标
gitlab-backup restore force=yes BACKUP=1673231242_2023_01_09_15.5.4

重置、重启、自检

执行下面命令执行重置、重启以及自检。

gitlab-ctl reconfigure 
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true

在执行gitlab-rake gitlab:check SANITIZE=true的时候可能会出现报错,类似:

Internal API available: FAILED - Internal API error (502)
gitlab-shell self-check failed
  Try fixing it:
  Make sure GitLab is running;
  Check the gitlab-shell configuration file:
  sudo -u git -H editor /opt/gitlab/embedded/service/gitlab-shell/config.yml
  Please fix the error above and rerun the checks.

又或者:

Sidekiq: ... Running? ... no
  Try fixing it:
  sudo -u git -H RAILS_ENV=production bin/background_jobs start
  For more information see:
  doc/install/installation.md in section "Install Init Script"
  see log/sidekiq.log for possible errors
  Please fix the error above and rerun the checks.

这可能是因为重启Gitlab后,部分服务还没完全启动以至于自检出现报错,稍等一会再重新执行自检可能就会顺利通过。

数据恢复的流程至此结束。

其他相关操作

最后这里列出一些涉及的操作。

# 进入gitlab容器
docker exec -it gitlab bash

# 创建gitlab容器
docker run -d --name gitlab \
  -v /data/app/gitlab/config:/etc/gitlab \
  -v /data/app/gitlab/logs:/var/log/gitlab \
  -v /data/app/gitlab/data:/var/opt/gitlab \
  --restart always \
  --hostname gitlab.windfant.top \
  gitlab/gitlab-ce:15.5.4-ce.0

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容