svn备份方式对比分析

一般采用三种方式:

1、svnadmin dump
2、svnadmin hotcopy
3、svnsync

注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy、rsync命令。 曾经用rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。

优缺点分析:

第一种

svnadmin dump是官方推荐的备份方式
优点是:比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
个人建议在版本数比较小的情况下使用这种备份方式。

第二种

svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。

第三种

svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。
优点是:当制作成2个镜像库的时候起到双机实时备份的作用;
缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。

svnadmin dump方式

SVN迁移需要做如下操作:

将原来的Repository导出为一个文件dumpfile:

svnadmin dump 原先的repos的目录路径(/repository/directory) > dumpfile

如:

svnadmin dump /home/svn/jiekou > /home/svn/jiekou_bak

在另外一台机器上配置同样的SVN服务器:

安装SVN

root@pts/0 # yum -y install subversion

创建svn版本库目录

mkdir -p /home/svn/jiekou

创建版本库

svnadmin create /home/svn/jiekou/

root@pts/0 # ll /home/svn/jiekou/
总用量 24
drwxr-xr-x 2 root root 4096 2月  19 14:42 conf
drwxr-sr-x 6 root root 4096 2月  19 14:42 db
-r--r--r-- 1 root root    2 2月  19 14:42 format
drwxr-xr-x 2 root root 4096 2月  19 14:42 hooks
drwxr-xr-x 2 root root 4096 2月  19 14:42 locks
-rw-r--r-- 1 root root  229 2月  19 14:42 README.txt

将dumpfile导入到新的repository 目录中:

svnadmin load 新建的repos的目录路径(/repository/directory) < dumpfile

如:

svnadmin load /home/svn/jiekou < /home/svn/jiekou_bak

将原先服务器的配置文件备份后复制到新服务器中:

/home/svn/jiekou/conf目录下
authz、passwd、svnserve.conf文件

svnadmin hotcopy方法

备份:

svnadmin hotcopy /home/svn/jiekou/ /home/svn/jiekou_bak –clean-logs

如果你传递–clean-logs选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。 你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。

还原:

svnadmin hotcopy /home/svn/jiekou_bak /home/svn/jiekou/

linux下重新定位SVN URL方法

如果更换了SVN服务器,就需要重新定位,指向新的SVN URL。 重新定位命令:

svn switch --relocate 原svn地址 新svn地址

例子:

root@pts/0 # svn info
        路径: .
        URL: svn://192.168.0.2/youyuan/huluweb
        版本库根: svn://192.168.0.2/youyuan
        版本库 UUID: 8cb80f63-1ffe-4fea-9436-65ad52441f62
        版本: 6868
        节点种类: 目录
        调度: 正常
        最后修改的作者: yysx
        最后修改的版本: 6868
        最后修改的时间: 2016-02-15 16:49:25 +0800 (一, 2016-02-15)

root@pts/0 # svn switch --relocate svn://192.168.0.2/youyuan/huluweb svn://192.168.20.10/youyuan/huluweb
        认证领域: <svn://192.168.20.10:3690> /home/svn/youyuan
        “root”的密码: 
        认证领域: <svn://192.168.20.10:3690> /home/svn/youyuan
        用户名: yysx
        “yysx”的密码: 

        -----------------------------------------------------------------------
        注意!  你的密码,对于认证域:

             <svn://192.168.20.10:3690> /home/svn/youyuan

        只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
        可以保存加密后的密码。请参阅文档以获得详细信息。

        你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-    passwords”为“yes”或“no”,
        来避免再次出现此警告。
        -----------------------------------------------------------------------
        保存未加密的密码(yes/no)?yes

root@pts/0 # svn info
        路径: .
        URL: svn://192.168.20.10/youyuan/huluweb
        版本库根: svn://192.168.20.10/youyuan
        版本库 UUID: 8cb80f63-1ffe-4fea-9436-65ad52441f62
        版本: 6868
        节点种类: 目录
        调度: 正常
        最后修改的作者: yysx
        最后修改的版本: 6868
        最后修改的时间: 2016-02-15 16:49:25 +0800 (一, 2016-02-15)