svn备份通常采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync.安全
优缺点分析:服务器
==============svn
第一种svnadmin hotcopy只能进行全量拷贝,不能进行增量备份;post
优势:备份过程较快,灾难恢复也很快;若是备份机上已经搭建了svn服务,甚至不须要恢复,只须要进行简单配置便可切换到备份库上工做。url
缺点:比较耗费硬盘,须要有较大的硬盘支持.blog
第二种svnadmin dump是官方推荐的备份方式,进程
优势:比较灵活,能够全量备份也能够增量备份,并提供了版本恢复机制。rem
缺点:若是版本比较大,如版本数增加到数万、数十万,那么dump的过程将很是慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。同步
第三种svnsync其实是制做2个镜像库,当一个坏了的时候,能够迅速切换到另外一个。不过,必须svn1.4版本以上才支持这个功能。it
优势:当制做成2个镜像库的时候起到双机实时备份的做用;
缺点:看成为2个镜像库使用时,没办法作到“想彻底抛弃今天的修改恢复到昨晚的样子”;而看成为普通备份机制每日备份时,操做又较前2种方法麻烦。
下面具体描述这三种的备份的方法:
===============
就如下图project版本库为实例
1, svnadmin hotcopy
svnadmin hotcopy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任什么时候候运行这个脚本都获得一个版本库的安全拷贝,无论是否有其余进程正在使用版本库。
svnadmin dump命令语法
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
若是要把project备份到d:svnrootbak目录下,只须要运行:
svnadmin hotcopy E:\Repositories_test\project d:\svnrootbak\project
project版本库用hotcopy命令备份先后文件大小相同,以下图。
2, svnadmin dump
svnadmin dump命令语法
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
svnadmin dump命令用于导出整个Repository或Repository下的某个范围的修订版本。REPOS_PATH是版本库的路径,[-r LOWER[:UPPER]]用于指定导出的修订版本范围,由参数-r和两个用:号隔开阿拉伯数字组成。例如:-r 0:50表示导出才版本0到版本50之间的全部修订版,-r是revision的缩写。
而另外一个关键参数是--incremental。 它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。这样的好处是第一:能够把一个大的文 件切分红若干个小的文件。第二:在版本库已经存在的状况下,咱们只须要每次导出修改的部分,不须要每次都导出整个版本库的内容。甚至能够经过hook脚本 天天晚上自动将当天的修改dump出来作备份用。
首先用 svnlook youngest查看一下project最新的版本号,显示最新版本记录为4。
svnlook youngest E:\Repositories_test\project
svnadmin dump命令作全量备份
svnadmin dump E:\Repositories_test\project > d:\svnrootbak\dumpfile
svnadmin dump命令作版本0-2的备份
svnadmin dump E:\Repositories_test\project -r 0:2 --incremental > d:\svnrootbak\dumpfile1
svnadmin dump命令作版本3-4的备份
svnadmin dump E:\Repositories_test\project -r 3:4 --incremental > d:\svnrootbak\dumpfile2
三个dump文件大小以下图:
分别在SVN服务端新建空版本库dump、dump1、dump2
把dump文件导入dump版本库
svnadmin load E:\Repositories_test\dump < d:\svnrootbak\dumpfile
把dump1文件导入dump1版本库
svnadmin load E:\Repositories_test\dump1 < d:\svnrootbak\dumpfile1
把dump1和dump2文件导入dump1版本库(注: dump2文件不能导入没有1-2版本的原库中)
svnadmin load E:\Repositories_test\dump2 < d:\svnrootbak\dumpfile1
svnadmin load E:\Repositories_test\dump2 < d:\svnrootbak\dumpfile2
执行上述命令后SVN服务端文件目录以下:
3, svnsync
语法是:svnsync init{你刚建立的库url}{源库url}
svnsync sync : {你刚建立的库url}
在要备份的机器上创建版本库project1
进入project1版本库的hooks目录,例如D:\Repositories\TestRepostitory\hooks
③建立pre-revprop-change.bat文件:复制pre-revprop-change.tmpl,将扩展名改成pre-revprop-change.bat,而且清空原有的全部内容,保存。
④修改文件:修改pre-revprop-change.tmpl文件,用记事本打开该文件,把文件最后的exit 1改成exit 0
(原脚本的意思是若是修改的是svn:log属性,将容许修改,返回0;不然,不容许,返回1,咱们要将它改成容许修改全部的属性,在脚本中直接返回0)
⑤同步初步:
在目标机器上,打开命令提示符窗口运行
svnsync init file:///D:/Repositories/project1 http://192.168.2.12:8080/svn/project
⑥实现同步:
在目标机器上,打开命令提示符窗口运行
svnsync sync file:///D:/Repositories/project1
目标机SVN服务器同步后截图以下: