实验前提
官方文档
本次实验条件:
- Omnibus版本
- Gitlab12.1及更早版本(我们是10.8)
- 准备两台相同版本的Gitlab,最好是新部署,还没创建项目
注意:备份还原会将新的仓库所有现有数据删除 (SQL) 或移动到单独的目录
1. 先决条件
GitLab 提供了一个命令行界面来备份整个实例,包括:
- 数据库
- 附件
- Git 存储库数据
- CI/CD 作业输出日志
- CI/CD 作业工件
- LFS 对象
- Container Registry 映像
- Gitlab (页面内容)
- Snippets (片段)
- Group wikis (维基组)
备份不包括:
- Terraform 状态文件
- 包注册表文件
- Mattermost数据
备份配置文件和隐私配置文件
#备份好并还原到新Gitlab
cp /etc/gitlab/gitlab.rb /data/
cp /etc/gitlab/gitlab-secrets.json /data/
2. 备份Gitlab
执行备份命令后,会在/var/opt/gitlab/backups
目录生成文件名是[TIMESTAMP]_gitlab_backup.tar
的备份文件。TIMESTAMP
表示每个备份的创建时间,例如,如果备份名称为1493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar
,则时间戳为1493107454_2018_04_25_10.6.4-c
#开始备份Gitlab数据
gitlab-rake gitlab:backup:create
3. 恢复Gitlab
先决条件:
- 您已经安装了与创建备份完全相同的 GitLab Omnibus版本和类型 (CE/EE)。
- 你sudo gitlab-ctl reconfigure至少跑过一次。
- GitLab 正在运行。如果没有,请使用sudo gitlab-ctl start.
备份文件放到指定目录
cp 11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar /var/opt/gitlab/backups/
chown git.git /var/opt/gitlab/backups/11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar
停止连接到数据库的进程。让 GitLab 的其余部分保持运行:
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
#检查
sudo gitlab-ctl status
恢复Gitlab
#配置恢复
cp gitlab-secrets.json gitlab.rb /etc/gitlab/
#备份恢复
gitlab-rake gitlab:backup:restore
#从指定备份恢复Gitlab
gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.4
注意:gitlab-rake gitlab:backup:restore没有在您的注册表目录上设置正确的文件系统权限。这是一个已知问题。在 GitLab 12.2 或更高版本中,您可以使用gitlab-backup restore来避免此问题
重新配置、重启并检查 GitLab
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true