数据的备份和恢复前都需要停止 gitlab 的两个服务 unicorn,sidekiq(高级版本中,unicorn已经被puma所替代),以确保没有数据的写入。

  1. gitlab-ctl stop unicorn
  2. gitlab-ctl stop puma
  3. gitlab-ctl stop sidekiq

1. 数据备份

使用gitlab-rake gitlab:backup:create命令就可以很轻松的备份几乎整个 gitlab 的数据,包括代码,仓库设置,用户,组,个人设置等。
注意:**etc/gitlab**目录下的**gitlab.rb****gitlab-secrets.json**这两个文件需要手动进行备份,**gitlab.rb** 是 gitlab 的主配置文件,而**gitlab-secrets.json**存放着数据库一些加密信息 key,这两个文件很重要,迁移 gitlab 的时候会用到,一定也要记得进行备份。

  1. # 生成备份
  2. [root@ubuntu1804:~]# gitlab-rake gitlab:backup:create
  3. #备份文件格式为`时间戳 + gitlab版本号 + _gitlab_backup.tar`。
  4. [root@ubuntu1804:~]# ls
  5. 1610454809_2021_01_12_13.7.1_gitlab_backup.tar
  6. # 备份完成后启动Gitlab
  7. [root@ubuntu1804:~]# gitlab-ctl start

2. 数据恢复

恢复时只需要指定备份文件的时间即可,Gitlab 会自动补全后缀。

  1. [root@ubuntu1804:~]# gitlab-rake gitlab:backup:restore BACKUP=1610454809_2021_01_12_13.7.1

3. 备份脚本

  1. #!/bin/bash
  2. BACKUP_DIR=/data/gitlab/backups/
  3. BACKUP_OLD=/data/gitlab/backup-old/
  4. gitlab-rake gitlab:backup:create
  5. find ${BACKUP_DIR} -type f -name "*.tar" -mtime +2|xargs -i mv {} ${BACKUP_OLD}
  6. find ${BACKUP_OLD} -type f -name "*.tar" -mtime +5 -exec rm -f {} \;