1. 程式人生 > >git學習------> Gitlab如何進行備份恢復與遷移?

git學習------> Gitlab如何進行備份恢復與遷移?

gravity pen oid p s restart ... 數據 restore targe

https://blog.csdn.net/ouyang_peng/article/details/77070977

前段時間,在某臺CenterOS服務器上搭建了Gitlab環境,並且大家陸陸續續的都把代碼從svn遷移到了gitlab,但是之前的CenterOS服務器並不是搭建在公司的機房環境,而是搭建在辦公室的某臺閑置的電腦上,因此為了保證數據安全性,領導要求為將之前的Gitlab數據全部重新遷移到公司機房的服務器上面去。

1、Gitlab 創建備份

1.1 創建備份文件

首先我們得把老服務器上的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的壓縮包

技術分享圖片

1.1 更改Gitlab備份目錄

當然你也可以通過/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

1.2 Gitlab自動備份

1.2.1 定時自動備份

在crontab文件裏面,每一行代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段,每個字段之間用空格分割,沒用的段用*代替,格式如下:

m h dom mon dow user command

其中:

  • m: 表示分鐘,可以是從0到59之間的任何整數。
  • h:表示小時,可以是從0到23之間的任何整數。
  • dom:表示日期,可以是從1到31之間的任何整數。
  • mon:表示月份,可以是從1到12之間的任何整數。
  • dow:表示星期幾,可以是從0到7之間的任何整數,這裏的0或7代表星期日。
  • user : 表示執行的用戶。
  • command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件(如shell文件)。

實現每天淩晨2點進行一次自動備份:通過crontab使用備份命令實現,需重啟cron服務
方法1、在命令行輸入: crontab -e 然後添加相應的任務,wq存盤退出。

#輸入命令crontab -e
sudo crontab -e  
#輸入相應的任務
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

方法2、直接編輯/etc/crontab 文件,即vi /etc/crontab,然後添加相應的任務

#編輯 /etc/crontab
vi /etc/crontab 

然後再編輯框內輸入相應的任務

# edited by ouyang 2017-8-11 添加定時任務,每天淩晨兩點,執行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服務

#重新加載cron配置文件
sudo /usr/sbin/service cron reload
#重啟cron服務
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

關於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

關於如何將gitlab備份文件備份到遠程備份服務器,參考鏈接:

  • Git學習–>如何通過Shell腳本自動定時將Gitlab備份文件復制到遠程服務器?
    http://blog.csdn.net/ouyang_peng/article/details/77334215

1.2.2 設置備份過期時間

設置只保存最近7天的備份,編輯 /etc/gitlab/gitlab.rb 配置文件,找到gitlab_rails[‘backup_keep_time’],設置為你想要設置的值,然後保存。

gitlab_rails[‘backup_keep_time‘] = 604800  

技術分享圖片

2、 Gitlab遷移

2.1 copy老服務器上面的備份文件到新服務器

2.1.1 確保新Gitlab服務器和老Gitlab服務器版本相同

第一步,新服務器上的Gitlab的版本必須與創建備份時的Gitlab版本號相同. 比如新服務器安裝的是最新的9.4.3版本的Gitlab, 那麽遷移之前, 最好將老服務器的Gitlab 升級為9.4.3再進行備份.

技術分享圖片

可以參考之前的博客:
git學習——>在CenterOS系統上安裝GitLab並自定義域名訪問GitLab管理頁面

2.1.2 copy老服務器上面的備份文件到新服務器

第二步,如果你沒修改過默認備份目錄的話,需要將老服務器上的備份文件目錄(/var/opt/gitlab/backups目錄)下的備份文件拷貝到新服務器上的/var/opt/gitlab/backups目錄。

使用scp命令從遠程服務器copy文件或者目錄到本地

scp 用戶名 @IP 地址 : 文件名 1 遠程用戶名 @IP 地址 : 文件名 2

[用戶名 @IP 地址 :] 可以不輸入 , 可能需要輸入遠程用戶名所對應的密碼 .

可能有用的幾個參數 :

  • -v 和大多數 linux 命令中的 -v 意思一樣 , 用來顯示進度 . 可以用來查看連接 , 認證 , 或是配置錯誤 .

  • -C 使能壓縮選項 .

  • -P 選擇端口 . 註意 -p 已經被 rcp 使用 .

  • -4 強行使用 IPV4 地址 .

  • -6 強行使用 IPV6 地址 .

例如我使用如下命令,從遠程服務器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的文件如下

技術分享圖片

2.1.3 從備份文件中恢復gitlab

1、將備份文件權限修改為777

第一步,將備份文件權限修改為777,不然可能恢復的時候會出現權限不夠,不能解壓的問題

chmod 777 1502357536_2017_08_10_9.4.3_gitlab_backup.tar 

2、執行命令停止相關數據連接服務

第二步,執行命令停止相關數據連接服務

# 停止相關數據連接服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

3、執行命令從備份文件中恢復Gitlab

第三步,執行命令從備份文件中恢復Gitlab

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”繼續。

技術分享圖片

4、執行命令從備份文件中恢復Gitlab

第四步,啟動Gitlab

sudo gitlab-ctl start

技術分享圖片

3、打開遷移後的Gitlab,進行對比

老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

  • http://www.cnblogs.com/junrong624/p/4239517.html

關於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

關於如何將gitlab備份文件備份到遠程備份服務器,參考鏈接:

    • Git學習–>如何通過Shell腳本自動定時將Gitlab備份文件復制到遠程服務器?
      http://blog.csdn.net/ouyang_peng/article/details/77334215

git學習------> Gitlab如何進行備份恢復與遷移?