關於Subversion主從備份方式的調整(全量、增量腳本)更新
阿新 • • 發佈:2017-09-16
關於 是否 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天之前的備份文件。
- #!/bin/bash
- #function:SVN全量備份
- #Author: 誌在千裏 2012-4-30
- svn_repos="/home/svn/mysvn" #版本庫目錄
- backup_dir="/home/svn/backup" #備份目錄
- next_backup_file="week_incremental_backup".`date %Y%m%d`
- log="$backup_dir/week_backed_up.log" #日誌文件
- echo "********************"`date`"***************">> $log
- echo "SVN ALL DUMP start!">> $log
- last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #最新版本
- if [ -f $next_backup_file ];then
- echo "No new revisions to backup."
- exit 0
- else
- /usr/local/subversion/bin/svnadmin dump --incremental --revision 0:$last_rev $svn_repos > $backup_dir/$next_backup_file #0版本,到最新版本的全量備份
- fi
- echo "Last:$last_rev">> $log #記錄版本庫最新版本
- #刪除30天之前的備份數據
- find $backup_dir -type f -mtime +30 -exec rm -rf {} \; | tee -a $log
- echo "********************"`date`"***************">>$log
那麽如何還原呢?
- /usr/local/subversion/bin/svnadmin load /home/svn/mysvn 備份文件
增量備份:
較昨天記錄最後版本,導出新增的版本,使用load 將每日增量備份導入備份服務器。
說明:nfs降遠程文件系統掛載到主服務器,方便本地備份和傳輸
1、主服務器增量備份時間要比從服務器增量導入時間較前,保證增量備份已完成。
2、備份起點在上一次備份最新版本+1個後開始備份,刪除前一天的增量備份文件。
備份:
- #!/bin/bash
- #function:SVN增量備份
- #Author: 誌在千裏 2012-4-30
- svn_repos="/home/svn/mysvn" #版本庫
- backup_dir="/mnt/svnaddevreyday" #nfs掛載從服務器192.168.0.2的目錄
- next_backup_file="add_incremental_backup".`date %Y%m%d` #增量備份文件
- log="$backup_dir/last_add_backed_up.log" #日誌文件
- repo="$backup_dir/svn.txt" #記錄版本庫最新版本
- echo "********************"`date`"***************">> $log
- echo "SVN ADD DUMP start!">> $log
- first_rev="`cat $repo`" #備份起點
- last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #註服務器版本庫最新版本
slave_rev="`cat $backup_dir/slave.txt`" #從服務器提供的校驗版本
if [ $first_rev -ne $slave_rev ];then
echo "SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev" [email protected] #主服務器備份起點版本和從數據最後版本不一致,則郵件報警
else- /usr/local/subversion/bin/svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file #上一次記錄的版本,到最新版本的增量備份
- fi
- echo "Fist:$first_rev">> $log
- echo "Last:$last_rev">> $log #寫入日誌文件
- dump_rev=$(($last_rev 1)) #下一次備份起點,重點 +1版本,否則報錯
- echo "$dump_rev">$repo #覆蓋上一次備份起點
- #刪除之前的增量備份文件
- rm -rf $backup_dir/add_incremental_backup.$(date %Y%m%d --date=‘1 days ago‘)
從服務:
導入增量數據:
- #!/bin/bash
- #function:SVN增量導入
- #Author: 誌在千裏 2012-4-30
- svn_repos="/home/svn/mysvn" #從服務器192.168.0.2版本庫目錄
- backup_dir="/home/svn/svnaddevreyday" #nfs遠程共享主服務器192.168.0.1目錄
- log="$backup_dir/last_load.log" #日誌文件
- echo "********************"`date`"***************">> $log
- echo "SVN load start!">> $log
- first_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
- echo "First:$first_rev">> $log
- /usr/local/subversion/bin/svnadmin load $svn_repos </home/svn/svnaddevreyday/add_incremental_backup.* 2>&1 >>$log #導入增量備份文件
- last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"
- echo "Last:$last_rev">> $log #記錄最新版本號
- repo_slave=$(($last_rev+1)) #作為檢測主服務器和從服務器數據是否同步的判斷數據
- echo "$repo_slave">/home/svn/svnaddevreyday/slave.txt
- echo "********************"`date`"***************">>$log
- #刪除增量備份文件
- rm -rf /home/svn/svnaddevreyday/add_incremental_backup.*
- echo "SVN load Eed!">> $log
關於Subversion主從備份方式的調整(全量、增量腳本)更新