51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

SVN 备份的三种方式

一、优缺点分析 {#一、优缺点分析}

  • 第一种 svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
    • 缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
    • 个人建议在版本数比较小的情况下使用这种备份方式。
  • 第二种 svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
    • 优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
    • 缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。
  • 第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。
    • 优点是:当制作成2个镜像库的时候起到双机实时备份的作用;
    • 缺点是:当作为2个镜像库使用时,没办法做到"想完全抛弃今天的修改恢复到昨晚的样子";而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。
    • 我们由于版本数比较大 采用第二种做全量备份

二、下面具体描述这三种的备份的方法 {#二、下面具体描述这三种的备份的方法}

  • 计划任务: 每周六执行全量备份一次,周日到周5都是增量备份

  • 全量备份之dump [svnfullamountbak.sh]

    |---------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/sh ##Subversion decritory and file SVN_HOME=/usr/local/subversion/bin/ SVN_ADMIN=$SVN_HOME/svnadmin SVN_LOOK=$SVN_HOME/svnlook SVN_REPOROOT=/data/svnroot/repository #backup file path date=$(date '+%Y-%m-%d') RAR_STORE=/data/svnbackup/full/$date if [ ! -d "$RAR_STORE" ];then mkdir -p $RAR_STORE fi cd $SVN_REPOROOT #Projectname 指库名 for name in $(ls|grep Projectname) do $SVN_ADMIN dump $SVN_REPOROOT/$name > $RAR_STORE/full.$name.bak done |

  • 全量备份之hotcopy [svnhotcopybak.sh]

    |---------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/sh ##Subversion decritory and file SVN_HOME=/usr/local/subversion/bin/ SVN_ADMIN=$SVN_HOME/svnadmin SVN_LOOK=$SVN_HOME/svnlook SVN_REPOROOT=/data/svnroot/repository #backup file path date=$(date '+%Y-%m-%d') RAR_STORE=/data/svnbackup/hotcopy/$date if [ ! -d "$RAR_STORE" ];then mkdir -p $RAR_STORE fi cd $SVN_REPOROOT #Projectname 指库名 for name in $(ls|grep Projectname) do $SVN_ADMIN hotcopy $SVN_REPOROOT/$name $RAR_STORE/$name done |

  • 增量备份 [svnincrementalbak.sh]

    |---------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #!/bin/sh ##Subversion decritory and file SVN_HOME=/usr/local/subversion/bin/ SVN_ADMIN=$SVN_HOME/svnadmin SVN_LOOK=$SVN_HOME/svnlook SVN_REPOROOT=/data/svnroot/repository #backup file path date=$(date '+%Y-%m-%d') RAR_STORE=/data/svnbackup/incremental/$date if [ ! -d "$RAR_STORE" ];then mkdir -p $RAR_STORE fi #log file path Log_PATH=/data/svnbackup/log if [ ! -d "$Log_PATH" ];then mkdir -p $Log_PATH fi #read repo list cd $SVN_REPOROOT #Projectname 指库名 for name in $(ls|grep Projectname) do if [ ! -d "$RAR_STORE/$name" ];then mkdir $RAR_STORE/$name fi cd $RAR_STORE/$name if [ ! -d "$Log_PATH/$name" ];then mkdir $Log_PATH/$name fi echo ******Starting backup from $date****** >> $Log_PATH/$name/$name.log echo ******svn repository $name startting to backup****** >> $Log_PATH/$name/$name.log $SVN_LOOK youngest $SVN_REPOROOT/$name > $Log_PATH/A.TMP UPPER=`head -1 $Log_PATH/A.TMP` NUM_LOWER=`head -1 $Log_PATH/$name/last_revision.txt` let LOWER="$NUM_LOWER+1" $SVN_ADMIN dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR_STORE/$name/$LOWER-$UPPER.dump rm -f $Log_PATH/A.TMP echo $UPPER > $Log_PATH/$name/last_revision.txt echo ******This time we bakcup from $LOWER to $UPPER****** >> $Log_PATH/$name/$name.log echo ******Back up ended****** >> $Log_PATH/$name/$name.log done |


赞(1)
未经允许不得转载:工具盒子 » SVN 备份的三种方式