Linux篇:Shell腳本實現(xiàn)Gitlab雙備份

01 前言

最近成功從架構(gòu)組拿到了Gitlab的管理權(quán)限,第一件事就是想著如何備份,以防數(shù)據(jù)丟失背大鍋,于是在網(wǎng)上搜索一番,發(fā)現(xiàn)一段非常贊的備份腳本,記錄照著操作一下:

參考文章:https://blog.csdn.net/wh211212/article/details/77895801 《實現(xiàn)Shell腳本自動備份Gitlab檔案并同步到遠程》

https://blog.csdn.net/ouyang_peng/article/details/77070977 《git學習------> Gitlab如何進行備份恢復(fù)與遷移?》

尤其是第二篇文章博主,有非常多的好文章,非常值得學習推薦

02 備份過程記錄

Gitlab服務(wù)器與備份服務(wù)器進行密鑰配對,免密使用scp傳輸Gitlab備份文件

例如:Gitlab server(Gitlab服務(wù)器):181.137.128.32

? ? ? ? ? Bakcup server(遠程備份服務(wù)器): 181.137.128.103

在Gitlab服務(wù)器上生成密鑰對

ssh-keygen -t rsa

拷貝Gitlab上的公鑰上傳到備份服務(wù)器的指定目錄(~/.ssh/authorized_keys):默認為當前用戶的.ssh/authorized_keys文件內(nèi),為避免權(quán)限問題,直接用root賬戶

# 在gitlab上執(zhí)行,如果端口不是默認的22,采用scp的方式拷貝gitlab公鑰

ssh-copy-id? root@181.137.128.103

創(chuàng)建Gitlab檔案備份腳本(本地備份)

#!/bin/bash

# Script Name: auto-backup-gitlabdata.sh

# Functions: auto backup gitlab data

# backup gitlab config

tar -czvf /secret/gitlab/backups/$(date "+etc-gitlab-\%s.tgz") -C / etc/gitlab

# backup gitlab os

#/opt/gitlab/bin/gitlab-rake gitlab:backup:create

# gitlab本地備份路徑

LocalBackDir=/var/opt/gitlab/backups

# 備份時間戳

BackupDate=`date +"%F-%T"`

# 備份日志目錄

LogDir=$LocalBackDir/log

[ -d $LogDir ] || mkdir -p $LogDir

# 新建日志文件

LogFile=$LocalBackDir/log/backup_${ BackupDate }.log

touch $LogFile

# 追加日志到日志文件

echo "Gitlab auto backup at local server, start at? $(date "+%Y-%m-%d %H:%M:%S")" >>? $LogFile

echo "--------------------------------------------------------------------------" >> $LogFile

# 執(zhí)行g(shù)itlab本地備份功能

/opt/gitlab/bin/gitlab-rake gitlab:backup:create

if [ $? -eq 0 ]

then

echo "--------------------------------Success!-------------------------------" >> $LogFile

echo "Gitlab auto backup at local server, end at $(date "+%Y-%m-%d %H:%M:%S")" >> $LogFile

else

? echo "--------------------------------Failed!----------------------------------" >> $LogFile

? echo "Gitlab auto backup at local server failed at $(date "+%Y-%m-%d %H:%M:%S")" >> $LogFile

fi

創(chuàng)建shell定時備份Gitlab檔案到遠程腳本(遠程備份)

#!/bin/bash

# Script Name: auto-backup-gitlabdata-to-remote.sh

# Gitlab 檔案備份路徑(本地備份路徑)

LocalBackDir=/var/opt/gitlab/backups

# Backup server 存儲路徑(遠程備份路徑)

RemoteBackDir=/data/software-data-backup/gitlab

# 遠程備份使用用戶及端口

RemoteUser=root

RemotePort=22

# 備份服務(wù)器IP

RemoteIP=181.137.128.103

# 備份時間戳

BackupDate=` date "+%F-%T" `

# 備份日志文件

LogFile=$LocalBackDir/auto-backup-gitlabdata.log

# 查找本地備份目錄下一天以內(nèi)且后綴為.tar的Gitlab備份文件

Backfile_Send_To_Remote=$(find /var/opt/gitlab/backups -type f -mtime -1 -name '*.tar')

#Backfile_Send_To_Remote=` find $LocalBackDir -type f -mtime -1 -name '*.tar' `

# 新建備份日志文件

touch $LogFile

# 記錄備份日志

echo "${ BackupDate } Gitlab auto backup to remote server." >> $LogFile

echo "--------------------------------------------" >> $LogFile

# 打印每次備份的檔案名

echo "The files need send to remote server is: $Backfile_Send_To_Remote" >> $LogFile

# 本地傳輸Gitlab備份檔案到遠程

scp -P $RemotePort? $Backfile_Send_To_Remote $RemoteUser@$RemoteIP:$RemoteBackDir

# 備份結(jié)果追加到備份日志

if [ $? -eq 0 ]

then

? echo ""

? echo "$ ${ BackupDate } Gitlab Remote Backup Succeed!" >> $LogFile

else

? echo "$ ${ BackupDate } Gitlab Remote Backup Failed!" >> $LogFile

fi

定時執(zhí)行腳本(crontab)

crontab -e

# 在crontab文件中添加對應(yīng)定時任務(wù)

0 2 * * * root /opt/gitlab/bin/gitlab-rake gitlab:backup:create

# 禮拜一到禮拜五的凌晨4點15分備份gitlab的配置文件,并壓縮

15 04 * * 2-6 umask 0077;

tar -cfz /secret/gitlab/backups/$(date "+etc-gitlab-\%s.tgz") -C / etc/gitlab

# add by wanghui 每天凌晨三點,執(zhí)行備份Gitlab檔案到遠程服務(wù)器腳本

0 3 * * * root /bin/bash /home/yunwei/scripts/auto_backup_gitlabdata_to_remote.sh

重啟cron任務(wù)

/etc/init.d/crond reload

/etc/init.d/crond restart

定時刪除備份服務(wù)器上的備份文件

#!/bin/bash

# Script Name: auto_remove_old_backupdata.sh

GitlabBackDir=/data/software-data-backup/gitlab

# 查找遠程備份路徑下,超過30天的Gitlab備份檔案,然后刪除

find $GitlabBackDir -type f -mtime +30 -name '*.tar' -exec rm {} \;

同樣的道理,把這個腳本加入定時任務(wù)中

03 總結(jié)

個人基礎(chǔ)不是特別扎實,以至于依葫蘆畫瓢還是出了很多問題,所以還是要多學習啊...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容