1. 程式人生 > >關於Subversion主從備份方式的調整(全量、增量腳本)更新

關於Subversion主從備份方式的調整(全量、增量腳本)更新

關於 是否 incr times ext style 否則 ges sla

本文引用於http://blog.chinaunix.net/uid-25266990-id-3369172.html

之前對Subversion服務器作了遷移,關於SVN的架構也走了調整,有單一的服務器改為主從備份的方式。在“subversion遷移過程中增量備份腳本”中提到了增量備份的方式,但是運行一段時間,發現備份出錯,提示導入的文件已存在,於是重新檢查,修改了腳本。現在一直穩定運行著。

今天重新回顧,發現了之前文章很多錯誤的地方,對文章作了更新,附上Subsection 全量和增量備份腳本。

OS:RHEL 5.4
主:192.168.0.1
從:192.168.0.2
Subversion版本:svn, version 1.6.6 (r40053)
版本庫:mysvn

全量備份:

說明:每周日備份,刪除30天之前的備份文件。

  1. #!/bin/bash
  2. #function:SVN全量備份
  3. #Author: 誌在千裏 2012-4-30
  4. svn_repos="/home/svn/mysvn" #版本庫目錄
  5. backup_dir="/home/svn/backup" #備份目錄
  6. next_backup_file="week_incremental_backup".`date %Y%m%d`
  7. log="$backup_dir/week_backed_up.log" #日誌文件
  8. echo "********************"`date`"***************">> $log
  9. echo "SVN ALL DUMP start!">> $log
  10. last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #最新版本
  11. if [ -f $next_backup_file ];then
  12. echo "No new revisions to backup."
  13. exit 0
  14. else
  15. /usr/local/subversion/bin/svnadmin dump --incremental --revision 0:$last_rev $svn_repos > $backup_dir/$next_backup_file #0版本,到最新版本的全量備份
  16. fi
  17. echo "Last:$last_rev">> $log #記錄版本庫最新版本
  18. #刪除30天之前的備份數據
  19. find $backup_dir -type f -mtime +30 -exec rm -rf {} \; | tee -a $log
  20. echo "********************"`date`"***************">>$log


那麽如何還原呢?


  1. /usr/local/subversion/bin/svnadmin load /home/svn/mysvn 備份文件

增量備份:

較昨天記錄最後版本,導出新增的版本,使用load 將每日增量備份導入備份服務器。

說明:nfs降遠程文件系統掛載到主服務器,方便本地備份和傳輸

1、主服務器增量備份時間要比從服務器增量導入時間較前,保證增量備份已完成。

2、備份起點在上一次備份最新版本+1個後開始備份,刪除前一天的增量備份文件。

備份:


  1. #!/bin/bash
  2. #function:SVN增量備份
  3. #Author: 誌在千裏 2012-4-30
  4. svn_repos="/home/svn/mysvn" #版本庫
  5. backup_dir="/mnt/svnaddevreyday" #nfs掛載從服務器192.168.0.2的目錄
  6. next_backup_file="add_incremental_backup".`date %Y%m%d` #增量備份文件
  7. log="$backup_dir/last_add_backed_up.log" #日誌文件
  8. repo="$backup_dir/svn.txt" #記錄版本庫最新版本
  9. echo "********************"`date`"***************">> $log
  10. echo "SVN ADD DUMP start!">> $log
  11. first_rev="`cat $repo`" #備份起點
  12. last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #註服務器版本庫最新版本

  13. slave_rev="`cat $backup_dir/slave.txt`" #從服務器提供的校驗版本

    if [ $first_rev -ne $slave_rev ];then

  14. echo "SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev" [email protected] #主服務器備份起點版本和從數據最後版本不一致,則郵件報警

    else
  15. /usr/local/subversion/bin/svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file #上一次記錄的版本,到最新版本的增量備份
  16. fi
  17. echo "Fist:$first_rev">> $log
  18. echo "Last:$last_rev">> $log #寫入日誌文件
  19. dump_rev=$(($last_rev 1)) #下一次備份起點,重點 +1版本,否則報錯
  20. echo "$dump_rev">$repo #覆蓋上一次備份起點
  21. #刪除之前的增量備份文件
  22. rm -rf $backup_dir/add_incremental_backup.$(date %Y%m%d --date=‘1 days ago‘)

從服務:

導入增量數據:


  1. #!/bin/bash
  2. #function:SVN增量導入
  3. #Author: 誌在千裏 2012-4-30
  4. svn_repos="/home/svn/mysvn" #從服務器192.168.0.2版本庫目錄
  5. backup_dir="/home/svn/svnaddevreyday" #nfs遠程共享主服務器192.168.0.1目錄
  6. log="$backup_dir/last_load.log" #日誌文件
  7. echo "********************"`date`"***************">> $log
  8. echo "SVN load start!">> $log
  9. first_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
  10. echo "First:$first_rev">> $log
  11. /usr/local/subversion/bin/svnadmin load $svn_repos </home/svn/svnaddevreyday/add_incremental_backup.* 2>&1 >>$log #導入增量備份文件
  12. last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
  13. echo "Last:$last_rev">> $log #記錄最新版本號
  14. repo_slave=$(($last_rev+1)) #作為檢測主服務器和從服務器數據是否同步的判斷數據
  15. echo "$repo_slave">/home/svn/svnaddevreyday/slave.txt
  16. echo "********************"`date`"***************">>$log
  17. #刪除增量備份文件
  18. rm -rf /home/svn/svnaddevreyday/add_incremental_backup.*
  19. echo "SVN load Eed!">> $log

關於Subversion主從備份方式的調整(全量、增量腳本)更新