SVN备份

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

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

  1. 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
相关文章
相关标签/搜索