GitLab直接整体拷贝相关的数据、配置和日志目录来实现备份实际是无法起效的,GitLab官方目前提供的唯一方式就是使用命令行方式比如gitlab-rake(GitLab 12.1之前)或者gitlab-backup命令来实现备份,但这两种方式一般都是适用于全量备份,这篇文章讨论一下如何在GitLab中实现增量备份。GitLab目前提供的增量备份,并不是严格意义上的增量备份,通过这篇文章的验证,我们来了解一下这种机制的实现和效果。
全量备份 vs 增量备份
实际上有三种常见备份策略,文初图示就是中间的差分备份(Differential Backup)
策略 | 备份速度 | 磁盘使用量 | 备份文件对象 | 恢复所需文件 | 恢复速度 |
---|---|---|---|---|---|
全量备份 | 低 | 高 | 所有文件 | 全量备份文件 | 高 |
差分备份 | 中 | 由中到高 | 有变更的文件 | 全量备份文件和差分备份 | 高 |
增量备份 | 高 | 低 | 有变更的文件 | 全量备份文件和其后的所有增量备份文件 | 低 |
GitLab是否支持增量备份
对于这个非常简单的问题,但是回答有点绕,实际上GitLab是没有直接提供增量备份的功能的,比如使用gitlab-rake类似的命令可以在某次全量备份的基础之上直接生成从上次到指定时间点的备份数据,至少这种机制在目前还是不存在的,详细可以参看如下GitLab的一个Issue:
- https://gitlab.com/gitlab-org/gitlab-foss/-/issues/36975
上述Issue已经关闭,原因是因为如下Issue的存在:
此Issue已经放到backlog中,可以期待一下,但目前尚不知道何时完成,但是这种基础功能应该是会增强的。
备份过程
在备份与恢复指南中,已经整理了使用的方式,详细可参看:
环境准备
环境的创建和准备可参看:
备份源的GitLab的信息如下(本次实验中,host131对应的端口映射出来为宿主机器32001,host132为32002)
增量备份步骤
- 步骤1: 执行如下命令
执行命令:gitlab-backup create BACKUP=incremental_rsyncable GZIP_RSYNCABLE=yes
[root@host131 gitlab]# docker exec -it gitlab_gitlab_1 sh
# gitlab-backup create BACKUP=incremental_rsyncable GZIP_RSYNCABLE=yes
2020-08-19 22:44:58 +0000 -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2020-08-19 22:45:02 +0000 -- done
2020-08-19 22:45:02 +0000 -- Dumping repositories ...
* root/webhookproject (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b) ... [DONE]
[SKIPPED] Wiki
2020-08-19 22:45:03 +0000 -- done
2020-08-19 22:45:03 +0000 -- Dumping uploads ...
2020-08-19 22:45:03 +0000 -- done
2020-08-19 22:45:03 +0000 -- Dumping builds ...
2020-08-19 22:45:03 +0000 -- done
20