本文摘自:https://blog.csdn.net/ouyang_peng/article/details/77070977
首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。
gitlab-rake gitlab:backup:create
使用以上命令会在/var/opt/gitlab/backups
目录下创建一个名称类似为1502357536_2017_08_10_9.4.3_gitlab_backup.tar
的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1502357536_2017_08_10_9.4.3
是备份创建的日期
/etc/gitlab/gitlab.rb 配置文件须备份
/var/opt/gitlab/nginx/conf nginx配置文件
/etc/postfix/main.cfpostfix 邮件配置备份
生成完后,/var/opt/gitlab/backups
目录创建一个名称类似为1502357536_2017_08_10_9.4.3_gitlab_backup.tar
的压缩包
当然你也可以通过/etc/gitlab/gitlab.rb
配置文件来修改默认存放备份文件的目录
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
/var/opt/gitlab/backups
修改为你想存放备份的目录即可,例如下面代码将备份路径修改为/mnt/backups
gitlab_rails['backup_path'] = '/mnt/backups'
修改完成之后使用下面命令重载配置文件即可.
gitlab-ctl reconfigure
在crontab
文件里面,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,每个字段之间用空格分割,没用的段用*代替,格式如下:
m h dom mon dow user command
其中:
实现每天凌晨2点进行一次自动备份:通过crontab
使用备份命令实现,需重启cron
服务
crontab -e
然后添加相应的任务,wq
存盘退出。sudo crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
/etc/crontab
文件,即vi /etc/crontab
,然后添加相应的任务vi /etc/crontab
# 添加定时任务,每天凌晨两点,执行gitlab备份
0 2 * * * root /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
auto_backup.sh
,脚本内容为/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
然后再 /etc/crontab
中,添加相关任务定时执行 auto_backup.sh 脚本文件
sudo chmod +x auto_backup.sh
sudo vim auto_backup.sh
/etc/crontab
中添加执行脚本的定时任务,代码如下:
auto_backup.sh
脚本,脚本内容就填写:/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
0 2 * * * root /data/gitlabData/backups/auto_backup.sh -D 1
编写完 /etc/crontab
文件之后,需要重新启动cron
服务
sudo /usr/sbin/service cron reload
sudo /usr/sbin/service cron restart
实际运行如下
root@ubuntu4146:~# sudo /usr/sbin/service cron reload
root@ubuntu4146:~# sudo /usr/sbin/service cron restart
cron stop/waiting
cron start/running, process 17738
设置只保存最近7天的备份,编辑 /etc/gitlab/gitlab.rb
配置文件,找到gitlab_rails[‘backup_keep_time’]
,设置为你想要设置的值,然后保存。
gitlab_rails['backup_keep_time'] = 604800
第一步,新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的9.4.3版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为9.4.3再进行备份.
第二步,如果你没修改过默认备份目录的话,需要将老服务器上的备份文件目录(/var/opt/gitlab/backups目录)下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups目录。
使用scp命令从远程服务器copy文件或者目录到本地
scp 用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2
[用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .
可能有用的几个参数 :
例如我使用如下命令,从远程服务器copy刚才的备份文件到了新服务器的/var/opt/gitlab/backups/
目录下
scp root@172.28.17.155:/var/opt/gitlab/backups/1502357536_2017_08_10_9.4.3_gitlab_backup.tar /var/opt/gitlab/backups/
copy完后,查看copy的文件如下
777
不然可能恢复的时候会出现权限不够,不能解压的问题
chmod 777 1502357536_2017_08_10_9.4.3_gitlab_backup.tar
# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
例如我们的备份文件的编号是1502357536_2017_08_10_9.4.3
,因此执行下面的命令即可恢复gitlab
gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3
敲完命令后,出现第一个交互页面,
root@ubuntu4146:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3
Unpacking backup ... done
Before restoring the database we recommend removing all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.
Do you want to continue (yes/no)?
输入“yes”继续。
恢复过程中。。。。。
出现第二个交互页面,
Put GitLab hooks in repositories dirs [DONE]
done
Restoring uploads ...
done
Restoring builds ...
done
Restoring artifacts ...
done
Restoring pages ...
done
Restoring lfs objects ...
done
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)?
输入“yes”继续。
sudo gitlab-ctl start
老Gitlab服务器截图
新Gitlab服务器截图
对比,可以发现,除了两台服务器的ip地址不一样之外,其他的内容完全一模一样,迁移成功!
参考文档
Gitlab备份与恢复、迁移与升级
http://www.xuliangwei.com/xubusi/803.html
使用Gitlab一键安装包后的日常备份恢复与迁移
https://segmentfault.com/a/1190000002439923
http://www.cnblogs.com/shansongxian/p/6599144.html
http://blog.csdn.net/jenyzhang/article/details/53928438
关于Cron表达式可以参考链接:
http://www.cnblogs.com/junrong624/p/4239517.html
http://blog.csdn.net/xiyuan1999/article/details/8160998
http://www.cnblogs.com/kaituorensheng/p/4494321.html
关于gitlab备份可以参考链接:
http://blog.csdn.net/utopiaprince/article/details/50039989
http://www.cnblogs.com/shansongxian/p/6599144.html
http://www.ttlsa.com/linux/gitlab-backup-restore/
https://github.com/sund/auto-gitlab-backup
https://gitlab.com/help/raketasks/backup_restore.md
http://blog.csdn.net/felix_yujing/article/details/52918803
Git学习–>如何通过Shell脚本自动定时将Gitlab备份文件复制到远程服务器?
http://blog.csdn.net/ouyang_peng/article/details/77334215
“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.” – Tom Cargill
标 题: Gitlab如何进行备份恢复与迁移?