docker gitlab-ce 文件备份和恢复

843 阅读3分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

gtilab 文件备份

使用history 获取当时启动docker的命令,主要是想找到gitlab的挂载目录,如:

docker run -d -p 80:80 -p 22:22 --hostname 实际ip -v /usr/local/gitlab/etc:/etc/ gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/opt:/var/op t/gitlab --restart=always --privileged=true --name gitlab gitlab/gitlab-ce

从之前的启动命令可以知道,我gitlab的文件挂载在/usr/local/gitlab/opt目录下。

cd /usr/local/gitlab/opt

进入该目录/usr/local/gitlab/opt ll backups 检查下面没有备份文件

使用docker ps检查 我gitlab的容器信息

docker信息.png 确认gtilab 镜像名。

执行gitlab 的备份命令: docker exec -t gitlab gitlab-rake gitlab:backup:create

ls /usr/local/gitlab/opt/backups 查看新生成的备份文件

1637030055_2021_11_16_14.1.1_gitlab_backup.tar

其中14.1.1是当前gitlab的版本号,恢复时使用的gitlab必须是同样的版本号,否则没法进行恢复。该文件里面包含了所有user、group、git repository数据。

gitlab备份文件迁移还原

本次备份原因是因为同事设置了目录挂载,担心重启服务器后,出现数据丢失。百度上搜索了备份命令,顺带也了解了一下备份环境的迁移,在知乎上面的文章介绍如下:

  1. 准备好新机器、安装docker
  2. 拉相应版本的gitlab-ce镜像
docker pull gitlab/gitlab-ce:11.0.1-ce.0
  1. 运行全新Gitlab容器
docker run -d -p 80:80 -p 22:22 --hostname 实际ip -v /usr/local/gitlab/etc:/etc/ gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/opt:/var/op t/gitlab --restart=always --privileged=true --name gitlab gitlab/gitlab-ce
  1. 复制备份文件到backups目录
# 停掉gitlab容器
docker stop gitlab

# 复制备份文件
cp 1637030055_2021_11_16_14.1.1_gitlab_backup.tar /usr/local/gitlab/opt/backups/

# 重启gitlab容器
docker start gitlab
  1. 进入gitlab容器,恢复Gitlab数据
# 进入GITLAB
docker exec -it gitlab /bin/bash

# 停止数据服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 检查状态
gitlab-ctl status

# 数据恢复
sudo gitlab-rake gitlab:backup:restore BACKUP=1548648399_2019_01_28_11.0.1

# 重启并验证

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

至此,完成数据迁移,恢复到和之前一模一样。记录一下迁移过程,以备后用!

注意到,有个网友的评论内容

有一处小坑提醒其他人,执行数据恢复命令时sudo gitlab-rake gitlab:backup:restore BACKUP='备份文件名',此处输入的备份文件名一定要删掉文件名最后的后缀:'_gitlab_backup',否则gitlab会报错说找不到该文件,而实际上它是自己又在已输入的备份文件名后又自动追加_gitlab_backup,从而导致找不到对应文件。比如作者示例中生成的备份文件名为1548648399_2019_01_28_11.0.1_gitlab_backup.tar,则命令中只能用…… BACKUP=1548648399_2019_01_28_11.0.1,而不能用……BACKUP=1548648399_2019_01_28_11.0.1_gitlab_backup

拷贝备份文件到恢复目录的时候, 不需要停止和启动 gitlab。 没有意义,还容易造成用户docker run起来之后, 马上把这个容器stop掉,实际gitlab还没跑成功