多功能SVN备份脚本

这个脚本个人觉得比较完美了,SVN完全备份,加增量备份,并将备份出来的数据,同步到另外一台服务器上,而且可以实现实时备份并发邮件通知,历史备份记录想查就查。

这个脚本参考了部分网上的资源。

稍作修改就可以应用到你的实际生产环境了,有问题的话,可以联系我(*^__^*) ……

具体脚本内容如下:

#!/bin/sh   #by 崔元荣 #QQ:295749093  #svn多功能备份脚本!  svnbak_remote_dir=/data/192.168.1.7_svn/      ###################################   BACKUPDIR=/var/svnbackup     ###################################   SVNDIR=/var/svn     ###################################   ProjectLst=$BACKUPDIR/projectlist.txt     ###################################   LogFile=$BACKUPDIR/svnback.log   History_LogFile=$BACKUPDIR/history_svnback.log   DATE=`date +%Y%m%d-%T`     # - This is the path to the directory you want to archive   ###################################   export PATH=$PATH:/bin:/usr/bin:/usr/local/bin     # our actual rsyncing function  do_accounting()   {       echo " " > $LogFile           echo " " >> $LogFile           echo " " >> $LogFile           echo "###########################" >> $LogFile           echo "$DATE" >> $LogFile           echo "###########################" >> $LogFile             echo " " >> $History_LogFile           echo " " >> $History_LogFile           echo "###########################" >> $History_LogFile           echo "$DATE" >> $History_LogFile           echo "###########################" >> $History_LogFile             cd $BackDir   }     do_svndump()   {      PROJECTLIST=`cat $ProjectLst`      cd $SVNDIR      for project in $PROJECTLIST             do             echo "begin to dump $project databases" >> $LogFile             echo "begin to dump $project databases" >> $History_LogFile                   if [ ! -f $BACKUPDIR/$project.dump ]                   then                  YOUNGEST=`svnlook youngest $project`                   svnadmin dump $project > $BACKUPDIR/$project.dump                     if [ $? != 0 ];then                  echo "full-backup faild" >> $LogFile                   echo "full-backup faild" >> $History_LogFile                        else                          echo "OK,dump file successfully!!" >> $LogFile                           echo "OK,dump file successfully!!" >> $History_LogFile                          fi                   echo "$YOUNGEST" > $BACKUPDIR/$project.youngest                   else                          echo "$project.dump existed,will do increatment job" >> $LogFile                           echo "$project.dump existed,will do increatment job" >> $History_LogFile                            if [ ! -f $BACKUPDIR/$project.youngest ]                           then                          echo "error, no youngest check!" >> $LogFile                           echo "error, no youngest check!" >> $History_LogFile                           else                                  PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`                                   NEWYOUNGEST=`svnlook youngest $project`                                   if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]                                   then                                          echo " no database updated!" >> $LogFile                                           echo " no database updated!" >> $History_LogFile                                   else                                          LASTYOUNGEST=`expr $PREVYOUNGEST + 1`                                           echo "last youngest is $LASTYOUNGEST" >> $LogFile                                           echo "last youngest is $LASTYOUNGEST" >> $History_LogFile                                           svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE                                             if [ $? != 0 ];then                                               echo "zhengliang-backup faild" >> $LogFile                                                echo "zhengliang-backup faild" >> $History_LogFile                                                  else                                                      echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest                                                       echo "zhengliang-backup sucess!" >> $LogFile                                                       echo "zhengliang-backup sucess!" >> $History_LogFile                                                      fi                                   fi                           fi     fi           done   }       do_rsync()   {   rsync -avz --partial --progress --delete $BACKUPDIR/* root@192.168.1.6:$svnbak_remote_dir   if [ $? != 0 ]; then      echo "svnbak 192.168.1.7 rsync to 192.168.1.6 faild!!!" >> $LogFile       echo "svnbak 192.168.1.7 rsync to 192.168.1.6 faild!!!" >> $History_LogFile    else      echo "svnbak 192.168.1.7 rsync to 192.168.1.6 successfully!!" >> $LogFile       echo "svnbak 192.168.1.7 rsync to 192.168.1.6 successfully!!" >> $History_LogFile    fi   }     do_empty()   {   #echo "" > $LogFile   for project in $PROJECTLIST   do       rm -f $BACKUPDIR/$project*   done   }     do_mail()   {   cat $LogFile | mutt -s "SVN Backup status!" test@xiaocui.com   }   #################################################     case "$1" in      dump_full)           do_empty && do_accounting && do_svndump && do_rsync && do_mail           ;;       dump_incremental)           do_accounting && do_svndump && do_rsync && do_mail           ;;       *)           echo $"Usage: $0 {dump_full|dump_incremental}"          exit 2   esac  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f5b23af94f83bc4708cc244a71144696.html