SVN熱備份腳本
2011-08-03??徐磊
#!/bin/sh
#########################################################
# Script to do incremental rsync backups
# modidfy: wanjie.info
# date: 2010/06/04
# 這個腳本不是xulei寫的,我只是拿來主義,當然如果大家看不明白,可以提問,給予解釋
#########################################################
###################################
# svn backup log path
#? - This is used to log result
###################################
LogFile=~/tmp/svnbackup/svnback.log
DATE=`date +%Y%m%d`
###################################
# mail address for status updates
#? - This is used to email you a status report
###################################
MAILADDR=webmaster@wanjie.info
###################################
# HOSTNAME and project list
#? - This is also used for reporting
###################################
ProjectLst=~/tmp/svnbackup/projectlist.txt
###################################
# backup directory
# - This is the path to the backup directory
###################################
BackDir=~/tmp/svnbackup/$DATE
BACKUPDIR=~/tmp/svnbackup/$DATE
###################################
# svn directory
# - This is the path to the directory you want to archive
###################################
SVNDIR=~/svn
###################################
# svnadmin path
# - This is the path to the directory you want to archive
###################################
SVNADMIN=/usr/bin/svnadmin
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# our actual rsyncing function
# 這個函數主要是在備份日志里面打上時間,用了個前面date命令獲取到的日期
do_accounting()
{
echo " " >> $LogFile
echo " " >> $LogFile
echo "###########################" >> $LogFile
echo "$DATE" >> $LogFile
echo "###########################" >> $LogFile
cd $BackDir
}
# do_svndump就是這個腳本最主要的部分,通過使用svnadmin dump命令
# 來進行備份。對于SVN的Repository來說,不同數據倉儲是按文件夾的形式
# 進行管理的,備份出來的是xxx.dump,這個文件是相當有用處的,無論你是
# 在linux下恢復配置庫,還是windows下恢復都可以使用。腳本里面決定是否進行
# 新的備份,是通過xxx.youngest的日志文件的內容來判斷的。
do_svndump()
{
PROJECTLIST=`cat $ProjectLst`
cd $SVNDIR
for project in $PROJECTLIST
do
echo "begin to dump $project databases" >> $LogFile
if [ ! -f $BACKUPDIR/$project.dump ]
then
YOUNGEST=`svnlook youngest $project`
svnadmin dump $project > $BACKUPDIR/$project.dump
echo "OK,dump file successfully!!"
echo "$YOUNGEST" > $BACKUPDIR/$project.youngest
else
echo "$project.dump existed,will do increatment job" >> $LogFile
if [ ! -f $BACKUPDIR/$project.youngest ]
then
echo "error, no youngest check!" >> $LogFile
else
PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`
NEWYOUNGEST=`svnlook youngest $project`
if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]
then
echo " no database updated!" >> $LogFile
else
LASTYOUNGEST=`expr $PREVYOUNGEST + 1`
echo "last youngest is $LASTYOUNGEST" >> $LogFile
svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE
echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest
fi
fi
fi
done
}
# our post rsync accounting function
# 這個就是把你日志文件的內容當做郵件發送
do_mail()
{
mail $MAILADDR -s svn-back_log < $LogFile
}
# some error handling and/or run our backup and accounting
do_accounting && do_svndump && do_mail
-------------------------------------------------------------------------------------------------------
這個是比較麻煩的,要是想簡單,可以直接hotcopy之后,然后就tar壓縮,不用dump備份,因為dump是相當的花時間的。要是天天都備份的話,就很悲劇。
腳本的衍生就是,你可以把你備份出來的東西放置該機器的ftp上,然后再用其他的機器通過腳本,拷走配置庫的備份,因為誰都不知道svn服務器是不是會down掉,要是down掉了,一旦你的備份又是在svn服務器上,那就白備份了。
0
該文章對我有幫助
359°|3568 人閱讀|3
條評論
金鑫??2011-08-03
要是在配合 注釋 就完美了??呵呵
徐磊??2011-08-03
金鑫: 要是在配合 注釋 就完美了??呵呵ok 沒問題 重新編輯下
劉旸??2011-08-15
呵呵,還以為是keepalived的腳本呢
請 登錄 后發表評論