摘自: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 郵件配置備份
image.png
生成完后,/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地址不一樣之外,其他的內容完全一模一樣,遷移成功!
參考文檔
關于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備份可以參考鏈接: