1. 程式人生 > >svn備份指令碼(全量備份與增量備份)

svn備份指令碼(全量備份與增量備份)

前段時間發現內網伺服器的備份目錄越來大,感覺有點不對勁,原來是備份指令碼有問題,遂重新寫了一下備份指令碼,並分為全量備份和增量備份。

一、增量備份指令碼

#!/bin/bash
#svn 增量備份指令碼
repos_path="/home/svn/repos"
repos=`ls $repos_path`
Date=`date +%Y%m%d`
backup_path="/data1/backup/svn/"
echo `date` >> $backup_path/svn_backup.log
for i in $repos
do
pre_youngest=`cat $backup_path/$i/youngest_revision`
#獲取上次備份到的版本號
youngest=`svnlook youngest $repos_path/$i`
#獲取最後提交的版本號
if [ $pre_youngest -eq $youngest ]
then
echo "$i has no new revisions to backup." >> $backup_path/svn_backup.log
continue
fi
first_youngest=$[$pre_youngest +1]
#獲取新提交的版本號
if [ ! -d "$i"  ];
then
mkdir -p $backup_path/$i
fi
svnadmin dump  --incremental  --revision $first_youngest:$youngest $repos_path/$i > $backup_path/$i/$i.inc.$Date
#備份新提交的版本到最後提交的版本
if [ $? -eq 0 ];
then
echo "$i backup success"
else
echo "$i backup failed"
fi
echo $youngest > $backup_path/$i/youngest_revision
done


二、全量備份指令碼

#!/bin/bash
#svn 全量備份指令碼
repos_path="/home/erduo/svn/repos"
back_path="/data1/backup/svn"
repos=`ls /home/erduo/svn/repos`
Date=`date +%Y%m%d`
cd $back_path
#進入目錄,使總備份檔案存放在該目錄
echo `date` >> $back_path/svn_backup.log
for i in $repos
do
youngest=`svnlook youngest $repos_path/$i`
#獲取最後提交的版本號

svnadmin dump --revision 0:$youngest $repos_path/$i > $back_path/$i/$i-full.$Date
#備份
if [ $? -eq 0 ];
then
echo "$i Full amount of backup success" >> $back_path/svn_backup.log
else 
echo "$i Full amount of backup failed" >> $back_path/svn_backup.log
fi
echo $youngest > $back_path/$i/youngest_revision

find $back_path/$i  -mtime +20 -type f -name "$i.*" |xargs  rm -f 
#刪除二十天以上的備份檔案
done

find $back_path  -type f -name "*-full*" |xargs tar -C $back_path -zcvf svn_backup_full_$Date.tar.gz --exclude=svn_backup_full_* 
#將各倉庫的備份檔案打包
scp -P 10086 svn_backup_full_$Date.tar.gz  [email protected]:/data1/backup/backup_svn_254
#將打包好的備份檔案傳到另一臺伺服器上,這裡需要先設定好 ssh的免密登入,不然會需要輸入密碼,大致流程是本機生成金鑰對,然後將公鑰傳至目標主機,目標主機把公鑰內容追加到authorized_keys中。
#-P 為指定埠
if [ $? -eq 0 ];
then
echo "svn_backup_full_$Date.tar.gz has been copy to 192.168.1.250 successfully"
fi
find $back_path  -mtime +5 -type f -name "svn_backup_full_*.tar.gz" |xargs rm -f
#刪除打包好的備份檔案,這裡寫的規則是刪除五天前的檔案,是因為偷懶懶得改了,定時任務設定的是一週備份一次,就當是儲存上週的備份了。