天天看點

一鍵安裝Gitlab後的備份、遷移與恢複

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>=&gt;</code><code>"EagleEye"</code><code>, </code><code>"id"</code><code>=&gt;</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,如需轉載請自行聯系原作者

繼續閱讀