關於SVN備份我甚是頭疼,花了比學會搭建SVN的時間還要長。shell
我在兩種方法中糾結,後來實際案例給了我答案!svn
svnadmin dumpspa
備份語法1:svnadmin dump -r 起始版本:結束版本 項目路徑 > full.$DATE (全備)code
備份語法2:svnadmin dump -r 起始版本:結束版本 項目路徑 > inc.$DATE (增量)blog
//注:爲了保證備份數據容災性,我經過遠程NFS共享掛載到SVN本機做爲備份路徑rem
還原語法:svnadmin load 項目路徑 < full.$DATE(inc.$DATE ) //依次按備份的前後還原io
2. svnadmin hotcopy class
備份語法:svnadmin hotcopy 項目路徑 備份路徑date
還原語法:svnadmin hotcopy 備份路徑 項目路徑csv
svnadmin dump是官方推薦的備份方式,優勢是能夠全備和增量備,缺點是若是版本數幾萬到幾十萬的時候備份還原會比較慢,版本數小的能夠採用這種方式。
svnadmin hotcopy是至關於把源項目拷貝了一份,優勢是備份恢復較快,缺點是隻能全備不能增量備,也就是天天都要進行一次全備。
個人SVN數據是4個多G,我用svnadmin dump全備了一下,半小時左右吧,讓我沒想到的是全備出來以後數據是原來的3倍多,14個G,因而我被嚇着了,考慮是否是要用svnadmin hotcopy來備份了,可是我衡量了一下仍是決定採用svnadmin dump來備份。
我採用的是每月一次全備,剩下的一到兩天進行一次增量備份,這樣的話一個月只有一次大的備份,總容量也不過10多個G,一旦出問題恢復稍微麻煩一下,要依次恢復天天備的。
可是若是我採用svnadmin hotcopy的話,天天都要備4個多G,簡單方便,恢復也省事,可是這樣的話天天寫幾個G數據會加快硬盤的壽命,並且這種方式着實不靈活,全部只是偶爾使用這種方法。
3. 備份腳本
# 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
# cat /data/shell/incsvn.sh (增量備份腳本)
#!/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_BAKDIR/inc_$DATE 2> $LOG if [ $? -eq 0 ];then echo $VER2 > /tmp/version else echo "#####################################incsvn bak is failed#####################################" >> $LOG fi