原創作品,http://linuxerxy.blog.51cto.com/10707334/1865414
1.Gitlab創建備份
1 | #gitlab-rake gitlab:backup:create |
使用以上命令會在/var/opt/gitlab/backups目錄下創建一個名稱類似爲1393513186_gitlab_backup.tar的壓縮包,這個壓縮包就是Gitlab整個的完整部分, 其中開頭的1393513186是備份創建的日期。
2.Gitlab恢復
1 2 3 4 5 6 7 8 9 | # 停止相關數據連接服務 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq # 從1393513186編號備份中恢復 gitlab-rake gitlab:backup:restore BACKUP=1393513186 # 啓動Gitlab sudo gitlab-ctl start |
3.Gitlab遷移
遷移如同備份與恢復的步驟一樣, 只需要將老服務器/var/opt/gitlab/backups目錄下的備份文件拷貝到新服務器上的/var/opt/gitlab/backups即可(如果你沒修改過默認備份目錄的話)。但是需要注意的是新服務器上的Gitlab的版本必須與創建備份時的Gitlab版本號相同. 比如新服務器安裝的是最新的8.5版本的Gitlab, 那麼遷移之前, 最好將老服務器的Gitlab 升級爲8.5再進行備份。
4.自動備份
通過crontab使用備份命令實現自動備份:
1 2 | sudo su - crontab -e |
例如加入以下, 實現每天凌晨2點進行一次自動備份:
1 | 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create |
恢復過程中遇到一個錯誤:
1 2 3 4 5 6 7 8 9 10 11 12 | Started GET "/EagleEye/BMH.EagleEye" for 127.0.0.1 at 2016-10-25 10:54:32 +0800 Processing by ProjectsController #show as HTML Parameters: { "namespace_id" => "EagleEye" , "id" => "BMH.EagleEye" } Completed 500 Internal Server Error in 215ms (ActiveRecord: 19.5ms) OpenSSL::Cipher::CipherError (bad decrypt): app /models/project .rb:383: in `import_url' app /models/project .rb:413: in `external_import?' app /models/project .rb:405: in ` import ?' app /models/project .rb:421: in `import_in_progress?' app /controllers/projects_controller .rb:93: in `show' lib /gitlab/middleware/go .rb:16: in `call' |
系統是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錯誤不見,項目能訪問到。