關于SVN備份我甚是頭疼,花了比學會搭建SVN的時間還要長。
我在兩種方法中糾結,後來實際案例給了我答案!
-
svnadmin dump
備份文法1:svnadmin dump -r 起始版本:結束版本 項目路徑 > full.$DATE (全備)
備份文法2:svnadmin dump -r 起始版本:結束版本 項目路徑 > inc.$DATE (增量)
//注:為了保證備份資料容災性,我通過遠端NFS共享挂載到SVN本機作為備份路徑
還原文法:svnadmin load 項目路徑 < full.$DATE(inc.$DATE ) //依次按備份的先後還原
2. svnadmin hotcopy
備份文法:svnadmin hotcopy 項目路徑 備份路徑
還原文法:svnadmin hotcopy 備份路徑 項目路徑
svnadmin dump是官方推薦的備份方式,優點是可以全備和增量備,缺點是如果版本數幾萬到幾十萬的時候備份還原會比較慢,版本數小的可以采用這種方式。
svnadmin hotcopy是相當于把源項目拷貝了一份,優點是備份恢複較快,缺點是隻能全備不能增量備,也就是每天都要進行一次全備。
我的SVN資料是4個多G,我用svnadmin dump全備了一下,半小時左右吧,讓我沒想到的是全備出來之後資料是原來的3倍多,14個G,于是我被吓着了,考慮是不是要用svnadmin hotcopy來備份了,但是我衡量了一下還是決定采用svnadmin dump來備份。
我采用的是每個月一次全備,剩下的一到兩天進行一次增量備份,這樣的話一個月隻有一次大的備份,總容量也不過10多個G,一旦出問題恢複稍微麻煩一下,要依次恢複每天備的。
但是如果我采用svnadmin hotcopy的話,每天都要備4個多G,簡單友善,恢複也省事,但是這樣的話每天寫幾個G資料會加快硬碟的壽命,而且這種方式着實不靈活,所有隻是偶爾使用這種方法。
備份腳本:
# cat /data/shell/fullsvn.sh (全備腳本)
#!/bin/sh
SVN_DIR=/data/svn/project
SVN_BAKDIR=/svnbak/dump
DATE=$(date +%Y%m%d)
VER=$(svnlook youngest $SVN_DIR)
LOG=/tmp/fullsvn.log
/usr/bin/svnadmin dump $SVN_DIR > $SVN_BAKDIR/full_$DATE 2> $LOG
if [ $? -eq 0 ];then
echo $VER > /tmp/version
else
echo "#####################################fullsvn bak is failed" ##################################### >> $LOG
fi
#!/bin/sh
SVN_DIR=/data/svn/project
SVN_BAKDIR=/svnbak/dump
DATE=$(date +%Y%m%d)
LOG=/tmp/incsvn.log
LAST_VER=$(cat /tmp/version)
VER1=`expr $LAST_VER + 1`
VER2=$(svnlook youngest $SVN_DIR)
/usr/bin/svnadmin dump -r $VER1:$VER2 $SVN_DIR --incremental > $SVN_BAK_DIR/inc_$DATE 2> $LOG
if [ $? -eq 0 ];then
echo $VER2 > /tmp/version
else
echo "#####################################incsvn bak is failed#####################################" >> $LOG
fi