1.Gitlab创建备份
<code>#gitlab-rake gitlab:backup:create</code>
使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1393513186_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1393513186是备份创建的日期。
2.Gitlab恢复
<code># 停止相关数据连接服务</code>
<code>gitlab-ctl stop unicorn</code>
<code>gitlab-ctl stop sidekiq</code>
<code> </code>
<code># 从1393513186编号备份中恢复</code>
<code>gitlab-rake gitlab:backup:restore BACKUP=1393513186</code>
<code># 启动Gitlab</code>
<code>sudo</code> <code>gitlab-ctl start</code>
3.Gitlab迁移
迁移如同备份与恢复的步骤一样, 只需要将老服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups即可(如果你没修改过默认备份目录的话)。但是需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的8.5版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为8.5再进行备份。
4.自动备份
通过crontab使用备份命令实现自动备份:
<code>sudo</code> <code>su</code> <code>-</code>
<code>crontab</code> <code>-e</code>
例如加入以下, 实现每天凌晨2点进行一次自动备份:
<code>0 2 * * * </code><code>/opt/gitlab/bin/gitlab-rake</code> <code>gitlab:backup:create</code>
4.注意事项
①添加这项是因为添加自动备份后的几天时间里,Gitlab所在的KVM一直宕机。通过模拟cron计划任务,发现第一条gitlab创建备份的过程是先备份出许多(db、repo等文件),再通过这些文件合并成一个备份压缩包,最后删除文件,只剩一个备份压缩包。这就相当于先产生2倍备份压缩包,导致磁盘爆满。恢复也是同样的过程。
②
<code>Unpacking backup ... </code><code>tar</code><code>: 1479265387_gitlab_backup.</code><code>tar</code><code>: Cannot </code><code>open</code><code>: Permission denied</code>
<code>tar</code><code>: Error is not recoverable: exiting now</code>
<code>unpacking backup failed</code>
迁移的备份文件权限不足,可以给足权限,然后再恢复。
③恢复过程中遇到一个错误:
<code>Started GET </code><code>"/EagleEye/BMH.EagleEye"</code> <code>for</code> <code>127.0.0.1 at 2016-10-25 10:54:32 +0800</code>
<code>Processing by ProjectsController</code><code>#show as HTML</code>
<code> </code><code>Parameters: {</code><code>"namespace_id"</code><code>=></code><code>"EagleEye"</code><code>, </code><code>"id"</code><code>=></code><code>"BMH.EagleEye"</code><code>}</code>
<code>Completed 500 Internal Server Error </code><code>in</code> <code>215ms (ActiveRecord: 19.5ms)</code>
<code>OpenSSL::Cipher::CipherError (bad decrypt):</code>
<code> </code><code>app</code><code>/models/project</code><code>.rb:383:</code><code>in</code> <code>`import_url'</code>
<code> </code><code>app</code><code>/models/project</code><code>.rb:413:</code><code>in</code> <code>`external_import?'</code>
<code> </code><code>app</code><code>/models/project</code><code>.rb:405:</code><code>in</code> <code>`</code><code>import</code><code>?'</code>
<code> </code><code>app</code><code>/models/project</code><code>.rb:421:</code><code>in</code> <code>`import_in_progress?'</code>
<code> </code><code>app</code><code>/controllers/projects_controller</code><code>.rb:93:</code><code>in</code> <code>`show'</code>
<code> </code><code>lib</code><code>/gitlab/middleware/go</code><code>.rb:16:</code><code>in</code> <code>`call'</code>
系统是centos 6.2的 ,gitlab是8.8.5迁移到另外一台服务器上的,其它页面都可以正常显示,但是一点击项目就会显示500,。查看/var/log/gitlab/gitlab-rails/production.log日志,发现上述错误 。
通过搜索知道,这是gitlab数据迁移时的一个缺陷。解决方法:
1、覆盖原来gitlab的 db_key_base 到新的gitlab
db_key_base 位置在 /etc/gitlab/gitlab-secrets.json
2、EE版本执行
sudo gitlab-rails runner "Project.where(mirror: false).where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
CE版本执行
sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
重启gitlab,发现500错误不见,项目能访问到。
本文转自YU文武貝 51CTO博客,原文链接:http://blog.51cto.com/linuxerxy/1865414,如需转载请自行联系原作者