1.版本库备份

1.1.svnadmin dump方式备份

此方法借助的是Subversion官网推荐的svnadmin dump备份方式,它的优点是比较灵活,既可以进行全量备份又可以进行增量备份,并提供了版本恢复机制。

缺点是如果版本过大,如版本数增加到数万、数十万条时,则dump的过程很慢,备份时耗时,恢复备份库时更耗时,不利于快速进行灾难恢复,此方法建议在版本库较小的情况下采用。

a) 全量备份:

命令格式为:svnadmin dump 版本库路径及名称 -r 导出的版本号 > 备份版本库存放路径及名称(-r是revision的缩写,也可以--revision代替)

或 svnadmin dump 版本库路径及名称> 备份版本库存放路径及名称(不添加版本号时默认备份最高版本号)

例如:

1. 对project版本库的前10个版本进行备份,将备份文件保存到H盘的svn_back/dump文件夹中,进入cmd命令行,输入以下命令:

svnadmin dump E:\Repository\project -r 10 > H:\svn_backup\dump\project.dump

点击回车后,如图所示,已经将project版本库中的前10个版本进行备份。

2. 对project版本库的所有版本进行备份,将备份文件保存到H盘的svn_backup文件夹中,

进入cmd命令行,输入以下命令:

svnadmin dump F:\Repository\project>H:\svn_backup\project.dump

点击回车后,如下图所示,已经将project版本库中的12个版本全部备份。

b)增量备份:

增量备份主要使用svnadmin dump的 --incremental选项来实现,在对版本进行管理时,采用增量备份的方法,只需要对版本库从上次备份后的版本号开始进行备份即可,节省了对版本库备份时的时间及存放版本的硬盘资源。

命令格式:

svnadmin dump 版本库路径及名称 -r 上次备份的版本号:到本次要备份到的版本号 --incremental > 导出的版本库存放的路径及命名

例如:project版本库此时的最高版本号为16,分三次进行增量备份,每次备份后的文件名称分别为project1.dump、project2.dump、project3.dump,将备份文件都保存到H盘的svn_backup/dump文件夹下。

首先对project版本库的版本号为0至10的版本进行备份,备份文件名称为project1.dump

进入cmd命令行,输入如下命令:

svnadmin dump E:\Repository\project -r 0:10 > H:\svn_backup\dump\project1.dump

其次对版本号从11至15的版本进行备份,备份文件名称为project2.dump

输入命令:svnadmin dump E:\Repository\project -r 11:15 --incremental > H:\svn_backup\dump\project2.dump

最后对版本号从16至16的版本进行备份,备份文件名称为project3.dump

输入命令:svnadmin dump E:\Repository\project -r 16:16 --incremental > H:\svn_backup\dump\project3.dump

请注意:上面三个命令中第2,3个命令多了一个--incremental的参数,这就是采用了增量的方式导出版本库。

1.2.svnadmin hotcopy方式备份

此方法只能进行全量备份,不能进行增量备份,优点是备份较快,灾难恢复也很快,如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份机上。缺点是比较耗费硬盘空间,需要较大的硬盘支持。

命令格式为:

svnadmin hotcopy 版本库路径及名称备份版本库存放路径及名称

比如:对project版本库进行热备份,将备份文件保存到H盘的svn_backup\hotcopy文件夹中,进入cmd命令行,输入以下命令:

svnadmin hotcopy E:\Repository\project  H:\svn_backup\hotcopy\project_bak

或svnadmin hotcopy E:\Repository\project  H:\svn_backup\hotcopy\project_bak --clean-logs

点击回车后,进入hotcopy文件夹下便可发现已将project库保存下来。

这个命令会制作一个版本库的完全“热”拷贝,包括所有的钩子、配置文件,当然还有数据库文件。如果命令后面传递--clean-logs选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件,可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。

1.3. svnsync方式备份

svnsync是Subversion的一个远程版本库镜像工具,它允许把一个版本库的内容录入到另一个。在任何镜像场景中,有两个版本库:源版本库,镜像(或“sink”)版本库。源版本库就是svnsync获取修订版本的库,镜像版本库是源版本库修订版本的目标,两个版本库可以是在本地或远程,它们只是通过URL跟踪。

此方法同样只能进行全量备份,它实际上是制作了两个镜像库,当一个坏了的时候可以迅速切换到另一个,它必须是svn1.4版本以上才支持此功能。优点是当制作成两个镜像库的时候可以起到双机实时备份的作用。缺点是当作为两个镜像库使用时,无法做到“想完全抛弃今天的修改恢复到昨天的样子”,而当作为普通备份机制每天备份时,操作又较前两种方法麻烦。具体使用方法见下面的例子。

例如:采用svnsync方式同步备份两台机器的SVN,同步的版本库名称为project,SVN版本库在1.4以上

源版本库目录为:svn://10.1.1.156/project

同步版本库目标目录为:http://10.1.1.224/project

1. 首先在目标目录中创建一个空的版本库,如果目标目录中存在相同的项目,先清除再创建一个新的版本库

命令为:svnadmin create E:\Repository\project

2. 在目标目录的project版本库的hooks目录下,新建pre-revprop-change.bat

内容只有:exit 0

也可以直接将pre-revprop-change.tmpl更改为pre-revprop-change.bat,然后将其中的内容的最后三行注释掉,或者清空内容只添加一句exit 0

3. 执行初始化

在目标目录机器中进入cmd命令行,输入如下命令:

svnsync init http://10.1.1.224/project svn://10.1.1.156/project

即svnsunc init 目标库路径 源库路径

注:执行这一步一般会出现问题:svnsync认证失败,解决方法是将源版本库中的conf拷贝到目标版本库的conf中替换。

如果成功则会首先提示输入目标机器的密码,此项输与不输无关紧要,然后提示输入登陆版本库的用户名和密码,建议源版本库和目标版本库设置相同的用户名和密码,输入正确后会提示Copied properties for revision 0.

4. 执行同步

在目标目录机器中的cmd命令行,输入如下命令:

svnsync sync http://10.1.1.224/project

即svnsunc sync 目标库路径

点击回车后会显示复制的版本号和提交数据等信息。

如果同步时出现“Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'

...

Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'

svnsync: Couldn't get lock on destination repos after 10 attempts ”的错误:

是因为版本库属性被锁,删掉属性即可:

svn propdel svn:sync-lock --revprop -r0 http://10.1.1.224/project

5. 更新同步

1) Windows环境下:

a. 采用全量备份:

首先在源版本库project的根目录下添加commit.bat脚本,内容如下:

echo off

set SVN_HOME="C:\Program Files\Subversion"

set SVN_ROOT=E:\Repository

set BACKUP_SVN_ROOT=E:\Repositorybak

set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%

if exist %BACKUP_DIRECTORY% goto checkBack

echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log

mkdir %BACKUP_DIRECTORY%

for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI

goto end

:checkBack

echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。

goto end

:end

其次同样在project版本库根目录下添加simpleBackup.bat脚本

@echo 正在备份版本库%1……

@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2

@echo 版本库%1成功备份到了%BACKUP_DIRECTORY%\%2!

b. 采用增量备份:

首先在源版本库project下的hooks中添加commit.bat脚本,内容如下:

echo off

set SVN_HOME="C:\Program Files\CollabNet\Subversion Server"

set SVN_ROOT=E:\Repository

set DELTA_BACKUP_SVN_ROOT=E:\Repositorybak\delta

set LOG_FILE=%1\backup.log

echo backup revision %2 >> %LOG_FILE%

for /r %SVN_ROOT% %%I in (.) do if /i %SVN_ROOT%\%%~nI == %1 %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2

goto end

:end

同样在hooks中再添加deltaBackup.bat脚本,内容如下

@echo 正在备份版本库%2......

%SVN_HOME%\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1.dump

%SVN_HOME%\svnsync sync --non-interactive svn://10.1.1.238/%1 --source-username caocan --source-password cc

@echo 版本库%2成功备份到了%3!

2) Linux环境下

同样可以按照Windows环境下的方法进行。

最后需要把post-commit.bat 的权限设置为755权限。如果post-commit脚本出错,或者无可执行权限,在提交更新时会报错。

2.备份库恢复

2.1svnadmin dump方式的备份库

a) 全量备份方式备份库的恢复

将备份在H盘的svn_backup文件夹中的project.dump恢复到版本库中。

进入cmd命令行,输入以下命令:

svnadmin load F:\Repository\project<H:\svn_backup\project.dump

点击回车后,如下图所示,已经将备份的project.dump还原到project版本库中。

注:导入备份库到新的SVN库下时,一定要新建库!

b) 增量备份方法备份库的恢复

首先创建一个新的版本库,名称为project_dump,将前面以增量备份方式备份的三个文件依次导入此版本库中。

首先导入project1.dump文件,进入cmd命令行,输入命令:

svnadmin load E:\Repository\project_dump<H:\svn_backup\dump\project1.dump

点击回车后命令行窗口如下:

然后再导入project2.dump文件,输入命令:

svnadmin load E:\Repository\project_dump<H:\svn_backup\dump\project2.dump

最后导入project3.dump文件,输入命令:

svnadmin load E:\Repository\project_dump<H:\svn_backup\dump\project3.dump

至此已将所有的备份文件都导入新版本库后则整个版本库都已恢复,此种方法只能针对备份时采用--incremental方式进行备份的文件进行,否则会提示错误:版本库文件已经存在。

2.2.svnadmin hotcopy方式的备份库

利用hotcopy方式备份的备份库是一个功能完全的版本库,当发生严重错误时可以作为活动版本库直接进行替换。

2.3.svnsync方式的备份库

利用svnsync方式备份的备份库同样也是一个完整的版本库,当源版本库发生严重错误时可以利用此备份库作为活动版本库进行操作。

SVN版本库备份和恢复的更多相关文章

  1. 工作随笔——使用svnsync实时备份SVN版本库

    前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了....这TMD什么运气! 花费了点时间研究了下svn自己的同步工具.写个日志记录下. 注意:svnsync要求 ...

  2. 用svnsync 同步备份 svn 版本库 从一台服务器到另一台服务器

    如用svnsync 同步备份两台机器的svn .(就以linux服务器到windows服务器为例子) 要同步的项目名称:source_svn svn 版本库1 .4 以上 源目录:           ...

  3. 使用svnsync实时备份SVN版本库

    前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了....这TMD什么运气! 花费了点时间研究了下svn自己的同步工具.写个日志记录下. 注意:svnsync要求 ...

  4. svn版本库更新后自动同步到www

    注意:www目录一定要用SVN服务器 checkout出Repositories的代码 步骤: (1)新建www根目录 mkdir -p /data/www/lehuo (2)在www根目录下检出(c ...

  5. TortoiseSVN和VisualSVN-Server的配置使用,外网访问SVN版本库

    TortoiseSVN和VisualSVN-Server的配置使用,外网访问SVN版本库 SVN客户端程序:TortoiseSVN SVN服务器程序:VisualSVN-Server ######## ...

  6. SVN版本库(访问权限)配置实例笔记

    http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...

  7. svn 版本库的创建和配置

    1.创建SVN版本库 mkdir trunk svnadmin create /root/trunk/svntest #这里是路径和即将创建的版本库名称 2.配置svn cd /root/trunk/ ...

  8. linux上svn版本库创建小记

    [新建svn仓库] 先创建一个文件夹mkdir /opt/svn/wechat;   然后创建svn版本库    svnadmin create /opt/svn/wechat;   [创建用户组权限 ...

  9. svn版本库包含多个项目 ; git svn clone; 某一个子项目,有多个分支;

    情况描述: 公司的svn版本库,包含了多个项目,每个项目对应于1个文件夹 假设版本库名字为Main,其下的项目用 A项目,对应文件夹A B项目,对应文件夹B 通过git svn clone获取了svn ...

随机推荐

  1. Intellij Idea notes

    1. 解决intellij idea国际化配置文件resource bundle中文乱码问题 https://blog.csdn.net/u012453843/article/details/7531 ...

  2. loadrunner--vugen录制脚本提示“无Internet访问。您可能无法录制并执行业务进程”

    1.vugen录制脚本提示如下,为什么会提示这个呢?这个提示忽略会对录制脚本有影响吗?最好应该怎么操作? 惠普技术支持回复: 您可以试试,若点击“Yes”,是否可以继续录制网站?若可以的话,您也确定网 ...

  3. 多因子降维法(MDR,Multifactor Dimensionality Reduction )

    多因子降维法(MDR,multifactor dimensionality reduction)   多因子降维法(MDR,Multifactor Dimensionality Reduction ) ...

  4. code1135 选择客栈

    首先,预处理三个数组. pre[x]表示在此之前颜色为x的客栈有多少个. f[x]表示在此之前的客栈中,某个点c,c的颜色为x,并且从c点到已经读入的点之间有费用小于p的客栈,这样的c点的个数 las ...

  5. Web01 基础

    网址组成(四部分) 协议  http,https (https是加密的http) 主机  g.cn zhihu.com之类的网址 端口 HTTP协议默认80,因此一般不用填写 路径 下面的 / 和 / ...

  6. UI设计可供性解析:巧用隐藏的设计力提升用户体验

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 在实际的Web或App界面设计中,设计师们在学习和实践各种专业知识和技能之外,也会不可避免的遇到到各 ...

  7. centos7 dubbokeeper安装

    下载dubbokeeper源码 git clone https://github.com/dubboclub/dubbokeeper   mysql 先执行install-mysql.sh   编译好 ...

  8. POJ1273&&Hdu1532 Drainage Ditches(最大流dinic) 2017-02-11 16:28 54人阅读 评论(0) 收藏

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. java中父类的静态方法不能被重写

    Java中父类的静态方法确实不能被重写的,但是有的人可能去做实验发现在子类中去重写父类static方法时,并没什么问题.这里我来具体解释下. public class Parent { public ...

  10. 工作中经常打交道的Java代码の容器(一)