关于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