路漫漫其修远兮
吾将上下而求索

git学习:gitlab备份和恢复

备份

        对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。

备份时间戳

从gitlab 9.2版本开始,时间戳格式由EPOCH_YYYY_MM_DD更改为EPOCH_YYYY_MM_DD_Gitlab-version。

备份文件将保存在gitlab.yml文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。

使用omnibus软件包安装的

sudo gitlab-rake gitlab:backup:create

使用源码安装的

sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
[git@localhost ~/gitlab]$bundle exec rake gitlab:backup:create RAILS_ENV=production

在docker中运行的gitlab

docker exec -t <container name> gitlab-rake gitlab:backup:create

备份后文件目录(根据配置,默认)

[git@localhost ~/gitlab]$cd tmp/backups/
[git@localhost ~/gitlab/tmp/backups]$ls
1498833975_gitlab_backup.tar

排除特定目录

可以通过加环境变量skip来选择要备份的内容。可用的选项有:

db (数据库)
uploads (附件)
repositories (Git repositories 数据)
builds (CI job output logs)
artifacts (CI job artifacts)
lfs (LFS objects)
registry (Container Registry images)
pages (Pages content)

指定多个选项使用逗号分隔。

omnibus版本安装

sudo gitlab-rake gitlab:backup:create SKIP=db,uploads

源码安装

sudo -u git -H bundle exec rake gitlab:backup:create SKIP=db,uploads RAILS_ENV=production

使用crontab定时备份

omnibus版本

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

源码安装,这里环境变量根据自己的实际更改,要让定时脚本能找到mysqldump命令等,最好写个脚本,将输出重定向到文件,下面这样比较乱

[root@localhost /data/script]#cat backup_git.sh 
#!/bin/bash
#run this script as git 

PATH=/usr/local/ruby/bin:/usr/local/redis-6379/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

mkdir -p /home/git/gitlab/tmp/backups

fun_backup_git() {

cd /home/git/gitlab
bundle exec rake gitlab:backup:create RAILS_ENV=production CRON=1

}

fun_backup_git &>> /home/git/gitlab/tmp/backups/backup.log

#######################
[root@localhost /data/script]#cat /etc/crontab 
  0 2 *  *  * git  /bin/bash /data/script/backup_git.sh 

备份后的目录
[root@localhost /home/git/gitlab/tmp/backups]#ll
total 64
-rw-r--r-- 1 git git 61440 Jul  9 16:35 1499589324_gitlab_backup.tar
-rw-r--r-- 1 git git   380 Jul  9 16:35 backup.log

环境变量CRON=1的作用是如果没有任何错误发生时, 抑制备份脚本的所有进度输出。

建议将/etc/gitlab备份到安全的地方。如果要还原gitlab应用程序,还需要还原gitlab-secrets.json。如果没有,那么使用双重身份验证的GitLab用户将无法访问GitLab服务器,而存储在GitLab中的“安全变量”将被丢失。

恢复

只能还原到与备份文件相同的gitlab版本。

源码安装的

[root@localhost ~/lnmpr]#service gitlab stop
Stopping unicorn:                                          [  OK  ]
Stopping sidekiq:                                          [FAILED]

[root@localhost ~/lnmpr]#su - git
[git@localhost ~]$cd gitlab
[git@localhost ~/gitlab]$ls
app        config           db        Gemfile               Guardfile  log             Procfile  README.md  vendor
bin        config.ru        doc       Gemfile.lock          lib        MAINTENANCE.md  public    spec       VERSION
CHANGELOG  CONTRIBUTING.md  features  GITLAB_SHELL_VERSION  LICENSE    PROCESS.md      Rakefile  tmp
[git@localhost ~/gitlab]$bundle exec rake gitlab:backup:restore RAILS_ENV=production BACKUP=1498833975    #指明还原时间点

确保备份文件位于gitlab_rails['backup_path']。

参考文档:备份

未经允许不得转载:江哥架构师笔记 » git学习:gitlab备份和恢复

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址