svn备份的方式有三种:
1svnadmin dump 
2)svnadmin hotcopy 
3)svnsync. 
优缺点分析
============== 
第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。 
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。 
个人建议在版本数比较小的情况下使用这种备份方式。 
第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份; 
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。 
缺点是:比较耗费硬盘,需要有较大的硬盘支持)。 
第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。 
优点是:当制作成2个镜像库的时候起到双机实时备份的作用; 
 
以上不是自己观点,下面真实记录我的svn sync实验过程
两台机器
server1: 192.168.1.224
server2: 192.168.1.225
都是centos6.5环境
首先在sever1上搭建好了一个svn,然后模拟提交了一些东西
然后在sever2上搭建了一个一模一样的svn,保持空的
现在的目的是将server1同步备份到server2
在server1上直接运行:
svnsync init svn://192.168.1.225/ svn://192.168.1.224/
即svnsync init 目标svn链接  源svn链接,执行同步之前的初始化
这一步失败了,报如下错误:
svnsync: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook
提示需要在hooks下面创建一个pre-revprop-change hook
简单解释下,hook类似于操作系统的勾子,svn会在收到一些操作请求的时候执行hooks目录下的对应的脚本,例如想要commit的时候做一些事情就可以在对应的脚本下面添加你要执行的命令,下一次在commit 的时候就会触发执行
一开始没明白,不知道应该在源机器上创建还是在目标机器上创建,其实是在目标机器上创建的
然后在目标机器上copy了一份pre-revprop-change.tmpl成pre-revprop-change
再次执行初始化命令
依然报错,这次的错误不一样了
svnsync: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.
大概就是同步的过程中刚刚创建的hook调用没有成功,然后尝试给pre-revprop-change添加可执行权限,依然失败
依然失败,依然失败,在stack overflow上看到有人提出的解决方法是把pre-revprop-change改成下面这个样子:
#!/bin/sh
exit 0
再次初始化,终于成功,提示先让你输入用户名密码,最后一步的输出如下:
 
后来经过验证,确实需要可执行权限,改了之后还是失败的原因是hooks执行的结果是失败的,确实执行了
这一步成功之后,下一步同步就直接成功了:
svnsync sync svn://192.168.1.225/
执行这个命令会把没有同步的版本都同步过去
然后为了让server1每次有更新之后都自动同步到server2,可以在server1的commit的hooks最后加上执行一下同步的命令:
svnsync sync svn://192.168.1.225/
这样就完美实现了实时备份,而且在server1出现问题的时候随时都可以直接切换到server2哟
 
 
最后有一点要注意的是,我尝试备份到一个不为空的svn,也就是目标svn已经存在要备份的repos的时候,是会失败的,因此,只能备份到一个空的svn
 
最后还有一个非常重要的要注意的问题就是,如果在直接在目标在做了修改的话,那么后面就没有办法同步了,都会失败,所以,禁止在备份svn上直接做任何操作,这里的花建议专门写一个脚本,在post-commit勾子里面调用,通过脚本来同步,然后判断一下是否同步成功,如果同步失败了需要及时处理,比如可以给相关人员发邮件通知及时处理,防止同步失败了导致server1一旦宕机之后突然发现server2早就没有同步了就晚了。

svn 双备份的更多相关文章

  1. svn 常用命令总结

    svn 命令篇 svn pget svn:ignore // 查看忽略项 svn commit -m "提交说明" // 提交修改 svn up(update) // 获取最新版本 ...

  2. svn常用命令

    1.新建版本库 [root@localhost repos]# mkdir -p project [root@localhost repos]# svnadmin create project [ro ...

  3. 对Maven、gradle、svn、spring 3.0 fragment、git的想法

    1.Maven Maven可以构建项目,采用pom方式配置主项目和其他需要引用的项目.同时可结合spring3.0的新特性web  fragment. 从现实出发,特别是对于管理不到位,程序员整体素质 ...

  4. 电脑新建svn仓库

    步骤1:安转svg: 注意事项: 安装的时候选择:Modify 安装到以下图片的步骤时: 黄色区域选择: 步骤2:新建svn仓库文件夹(本教程例子:D:\svn-5gpos),选择文件夹右键,点击下图 ...

  5. 项目持续集成环境(jenkins + SVN + maven + tomcat)

    整体流程 每次SVN上代码有变动,触发自动构建动作,并部署到服务器的tomcat上,具体流程: 1.SVN上提交代码修改 2.maven执行Goals 3.将web工程打成war包 4.关闭服务器的t ...

  6. Jenkins配置MSBuild实现自动部署(MSBuild+SVN/Subversion+FTP+BAT)

    所要用到的主要插件: [MSBuild Plugin] 具体操作: 1.配置MSBuild的版本 [系统管理]->[Global Tool Configuration]->[MSBuild ...

  7. ASP.NET Aries 2.0 发布(原来的源码SVN已关闭,开源源码已迁移到GitHub)

    主要更新: 1:增加子目录部署支持. 2:增加Taurus.MVC支持. 3:优化及Bug修复. 1:增加子目录部署支持: 其实在重写Aries框架的时候,我是去掉了目录部署功能的,主要是为了加快Ar ...

  8. [开源]QuickSwitchSVNClient,快速完成SVN Switch的工具

    在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一些代码的修改,但是又不想影响主要的开发,这个时候需要对当前的主分支做一些分支处理(br ...

  9. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

随机推荐

  1. java实现spark常用算子之Sample

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  2. centos8/redhat8 无法上网,通过启动systemctl start NetworkManger搞定

    在systemd里面,可以直接使用systemctl进行管理 启动:systemctl start NetworkManger 关闭:systemctl stop NetworkManager 开机启 ...

  3. go语言json转map

    package util import ( "encoding/json" "fmt" ) // json转map函数,通用 func JSONToMap(st ...

  4. 读书笔记《Oracle从入门到精通》

    目录 一.SQL基础 1.SQL种类 2.常用数据类型 3.DDL 4.约束 5.DML语句 二.SELECT语句 1.结果集'*'与指定列 2.拼接符 || 3.substr函数 4.instr函数 ...

  5. Intellij IDEA显示调用时序图插件SequenceDiagram

    1 推荐一个插件SequenceDiagram可以自动生成项目调用的时序图 安装好之后重启idea即可 2 使用,找到你要查询的方法

  6. 3、Rsync备份服务实战

    1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync官方地址:传送门http:// ...

  7. Java SE 核心 I

    Java SE 核心 I 1.Object类 在 Java 继承体系中,java.lang.Object 类位于顶端(是所有对象的直接或间接父类).如果一个类没有写 extends 关键字声明其父类, ...

  8. 延长zencart1.5.x后台的15分钟登录时间和取消90天强制更换密码

    延长zencart1.5.x后台的15分钟登录时间 打开includes\functions\sessions.php if (IS_ADMIN_FLAG === true) { if (!$SESS ...

  9. 接口数据转json格式

    接口数据转json格式 function tojson($result, $callback = null){ header('Content-Type:text/html; charset=utf- ...

  10. sql 实现取表中相同id时间最大的一行 利用distinct on

    数据表是这样的 select * from water_level_records m where ( select count(*) from water_level_records n where ...