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ǔ)不是特別扎實,以至于依葫蘆畫瓢還是出了很多問題,所以還是要多學習啊...