一、查看版本信息
在数据备份或数据迁移前,应查看对应的系统版本、软件版本等因素,否则可能会导致迁移后数据的不可用。
1.1 系统版本
[root@gitlab ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
1.2 软件版本
[root@gitlab ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
13.5.1
二、数据备份
在数据备份这里需要注意,当我们在执行备份操作时,为了保证备份数据的一致性,应事先停掉我们的Gitlab服务,如果不停掉的话,可能我们在备份的过程中有其他研发人员进行数据的上传,从而导致备份数据的不一致性和不完整性,甚至出现一些不可预估的错误。
2.1 备份路径
打开/etc/gitlab/gitlab.rb配置文件,查看一个和备份相关的配置项:gitlab_rails['backup_path'] = "/data/gitlab/backups"
默认的备份路径为:/var/opt/gitlab/git-data/
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
该项定义了默认备份出文件的路径,可以通过修改该配置,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。
2.2 开始备份
接下来我们通过备份命令进行数据备份,备份后的数据默认存放在该路径下:
/var/opt/gitlab/backups/
[root@gitlab ~]# cd /var/opt/gitlab/backups/
[root@gitlab backups]# ls
[root@gitlab backups]# gitlab-rake gitlab:backup:create # 开始备份(等待..)
[root@gitlab backups]# ls
1604716638_2020_11_07_13.5.1_gitlab_backup.tar # 备份后的数据包
也可以添加到 crontab 中定时执行:
0 3 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
可以到/data/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。
三、数据恢复
3.1 删除数据
为了测试效果,这里我们模拟研发人员不小心删掉了项目的某个文件(当然了这里是可以通过log
回滚的,假设这里已经删了很久了)
[zhuxiaojie@database my-rab]$ ls
html README.md
[zhuxiaojie@database my-rab]$ git rm -r html/ # 删除文件
rm 'html/index.html'
[zhuxiaojie@database my-rab]$ git add .
[zhuxiaojie@database my-rab]$ git commit -m '意外删除html文件'
[dev 0c35330] 意外删除html文件
1 file changed, 3 deletions(-)
delete mode 100644 html/index.html
[zhuxiaojie@database my-rab]$ git push sz dev # 提交代码
这时登录Gitlab去查看html文件是否还存在:
3.2 数据恢复
(1)停Gitlab服务
[root@gitlab ~]# gitlab-ctl stop unicorn
[root@gitlab ~]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
当我们在做数据备份和数据迁移时,应先停这两个服务,目的是为了保证数据的一致性。将老服务器/data/gitlab/backups
目录下的备份文件拷贝到新服务器上的/data/gitlab/backups
。不过这里我们不做数据迁移,而是做数据恢复,所以下面的这一步跳过。
[root@localhost gitlab]# rsync -avz 1604716638_2020_11_07_13.5.1_gitlab_backup.tar 10.20.151.135:/data/gitlab/backups/
注意权限:600权限是无权恢复的。 实验环境可改成了777,生产环境建议修改属主属组。
[root@gitlab backups]# pwd
/data/gitlab/backups
[root@gitlab backups]# chmod 777 1604716638_2020_11_07_13.5.1_gitlab_backup.tar
(2)开始恢复数据
[root@gitlab backups]# ls
1604716638_2020_11_07_13.5.1_gitlab_backup.tar
[root@gitlab backups]# gitlab-rake gitlab:backup:restore BACKUP=1604716638_2020_11_07_13.5.1
(3)启动Gitlab服务
[root@gitlab backups]# gitlab-ctl start unicorn
[root@gitlab backups]# gitlab-ctl start sidekiq
ok: run: sidekiq: (pid 9457) 1s
# 或:
[root@gitlab backups]# gitlab-ctl restart
四、恢复验证
启动Gitlab后,就可以群Gitlab管理平台上去看看之前研发人员误操作删除的html文件是否已恢复。