SVN备份

关于SVN备份我甚是头疼,花了比学会搭建SVN的时间还要长。

我在两种方法中纠结,后来实际案例给了我答案!

  1. 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



# 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_BAK_DIR/inc_$DATE  2> $LOG

if [ $? -eq 0 ];then
    echo $VER2 > /tmp/version
    else
    echo "#####################################incsvn bak is failed#####################################" >> $LOG
fi


你可能感兴趣的:(SVN,svn备份,svn远程备份)