Skip to content
On this page

GitLab 备份和数据迁移

数据备份

主动备份

备份时需要保持gitlab处于正常运行状态, 在要备份的主机上执行以下命令:

gitlab-rake gitlab:backup:create
gitlab-rake gitlab:backup:create

命令执行完成之后, 默认会在/var/opt/gitlab/backups目录之下, 备份内容包括含:数据库脚本、代码仓库、wiki、大文件、ssh用户秘钥等数据。

$ ll /var/opt/gitlab/backups
-rw------- 1 git git 43414650880 Nov 27 00:10 1543846302_2020_7_23_gitlab_backup.tar
$ ll /var/opt/gitlab/backups
-rw------- 1 git git 43414650880 Nov 27 00:10 1543846302_2020_7_23_gitlab_backup.tar

ℹ️修改GitLab备份目录, 编辑gitlab配置文件/etc/gitlab/gitlab.rb, 修改以下配置:

...
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" 	# 修改成自定义目录
gitlab_rails['backup_keep_time'] = 604800 		# 备份保留时长(7天), 避免因为备份文件爆满存储空间
...
...
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" 	# 修改成自定义目录
gitlab_rails['backup_keep_time'] = 604800 		# 备份保留时长(7天), 避免因为备份文件爆满存储空间
...

最后, 重载配置文件或者重启GitLab即可:

gitlab-ctl reconfigure 
# 或者 gitlab-ctl  restart
gitlab-ctl reconfigure 
# 或者 gitlab-ctl  restart

自动备份

使用crontab来进行自动备份:

sudo crontab -e  
# 每天凌晨两点备份
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  
sudo crontab -e  
# 每天凌晨两点备份
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

数据迁移

  1. 从源主机迁移到目标主机, 首先源主机备份一份.tar数据包, 并拷贝到目标主机的/var/opt/gitlab/backups目录.

⚠️注意: 确保备份和恢复的GitLab版本相同, 不然可能会出现不可预料的事情.(保险起见)

  1. 赋予.tar包权限, 以免出现因权限不足无法解压缩的问题:
chown git.git 1543846302_2020_7_23_gitlab_backup.tar
chmod 600 1543846302_2020_7_23_gitlab_backup.tar
chown git.git 1543846302_2020_7_23_gitlab_backup.tar
chmod 600 1543846302_2020_7_23_gitlab_backup.tar
  1. 执行恢复前, 停止GitLab数据库的连接, 保留其他进程:
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq 
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq 
  1. 执行恢复命令:
# gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
gitlab-rake gitlab:backup:restore BACKUP=1543846302_2020_7_23
# gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
gitlab-rake gitlab:backup:restore BACKUP=1543846302_2020_7_23

途中, 输入两次yes即可完成数据迁移.

  1. 最后重启GitLab: gitlab-ctl restart