SVN版本库备份和恢复

时间:2022-11-27 12:30:47

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个版本进行备份。

SVN版本库备份和恢复

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

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

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

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

SVN版本库备份和恢复

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

SVN版本库备份和恢复

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

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

SVN版本库备份和恢复

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

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

SVN版本库备份和恢复

请注意:上面三个命令中第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.

SVN版本库备份和恢复

4. 执行同步

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

svnsync sync http://10.1.1.224/project

即svnsunc sync 目标库路径

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

SVN版本库备份和恢复

如果同步时出现“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库下时,一定要新建库!

SVN版本库备份和恢复

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

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

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

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

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

SVN版本库备份和恢复

SVN版本库备份和恢复

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

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

SVN版本库备份和恢复

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

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

SVN版本库备份和恢复

至此已将所有的备份文件都导入新版本库后则整个版本库都已恢复,此种方法只能针对备份时采用--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版本库包含多个项目 &semi; git svn clone&semi; 某一个子项目,有多个分支;

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

随机推荐

  1. vs启动调试很慢的解决办法

    1.关闭所有 Visual Studio 2010 实例. 2.单击“开始”,选择“运行...”. 3.键入“devenv.exe /resetuserdata”. 此命令会运行几分钟时间,与此同时, ...

  2. 40 网络相关函数&lpar;八&rpar;——live555源码阅读&lpar;四&rpar;网络

    40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...

  3. 转:Oracle表分区

    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1. create table graderecord 2. ...

  4. Unity3D开发之NGUI点击事件穿透响应处理

    http://www.xuebuyuan.com/1936292.html 在使用NGUI 开发2D项目的时候,发现了一个问题,就是如果点出一个菜单,然后点击菜单上面的按钮的时候就会使得按钮下面的物品 ...

  5. springMVC部署

      一.导入springMVC所需要的jar包   下载地址:http://repo.spring.io/release/org/springframework/spring/   二.springM ...

  6. prototype对象的真正作用

    参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/encapsulation.html prototype对象的真正作用 在JavaScript语言中,每一个 ...

  7. js-学习方法之3

    熟悉JavaScript每一个方法的作用 这一要求听起来似乎有点不太实际,我想这个要求对于像C#.JAVA这些大型语言来说确实是,因为这些语言类库实在太庞大了,相信没有人可以全面记住它,而且也是没有必 ...

  8. bzoj 4373 算术天才⑨与等差数列

    4373: 算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.ph ...

  9. VUE工程上线首页加载慢问题优化

    使用webpack-bundle-analyzer工具 下面介绍几种压缩文件的方式. 1.vue-router懒加载 2.工程文件打包的时候不生成.map文件 3.gzip压缩 4.CDN 5.VUE ...

  10. SpringBoot系统列 2 - 配置文件,多环境配置(dev,qa,online)

    实现项目的多环境配置的方法有很多,比如通过在Pom.xml中配置profiles(最常见) 然后在Install项目打War包的时候,根据需求打不同环境的包,如图: 这种配置多环境的方法在SSM框架中 ...