svn备份的方式有三种:
1svnadmin dump 
2)svnadmin hotcopy 
3)svnsync. 
优缺点分析
============== 
第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。 
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。 
个人建议在版本数比较小的情况下使用这种备份方式。 
第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份; 
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。 
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。 
第三种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 sync主从同步学习的更多相关文章

  1. [记录]CentOS搭建SVN服务器(主从同步)

    CentOS搭建SVN服务器(主从同步)1.安装步骤如下: 1)安装: #yum install subversion 2)查看安装位置: #rpm -ql subversion 3)查看版本: #/ ...

  2. Redis主从同步原理-SYNC【转】

    和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为级 ...

  3. 【mq学习笔记-分布式篇】主从同步机制

    核心类: 消息消费到达主服务器后需要将消息同步到从服务器,如果主服务器Broker宕机后,消息消费者可以从从服务器拉取消息. HAService:RocketMQ主从同步核心实现类 HAService ...

  4. Redis主从同步要深入理解?一篇文章足矣!

    前言: 今天想和大家分享有关 Redis 主从同步(也称「复制」)的内容. 我们知道,当有多台 Redis 服务器时,肯定就有一台主服务器和多台从服务器.一般来说,主服务器进行写操作,从服务器进行读操 ...

  5. Redis系列之(二):Redis主从同步,读写分离

    1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...

  6. redis 主从同步

    修改redis.conf配置文件 vi redis.conf 在编辑模式下 输入  /slaveof 来搜索 将slaveof启用 即 将#删除 依次配置所有 slave 并将进程 kill 掉 重启 ...

  7. 烂泥:mysql5.5主从同步复制配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上篇文章<烂泥:学习mysql数据库主从同步复制原理>中,我们介绍了有关mysql主从复制的基本原理.在这篇文章中,我们来实际测试下mys ...

  8. Redis的主从同步复制

    先来看一下Redis的主从同步复制的原理: 在Slave启动并连接到Master之后,它将主动发送一条SYNC命令.此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台 ...

  9. MySQL数据库的主从同步实现及应用

    >>主从同步机制及应用 读写分离(Read/Write Splitting)让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),从数据库处理SELECT查询操作 ...

随机推荐

  1. POJ 2391 Ombrophobic Bovines

    Ombrophobic Bovines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18623   Accepted: 4 ...

  2. JAVA设计模式之3-抽象工厂模式

    书接上文,简单工厂模式解决的是可以枚举种类的类的问题,但是带来了高耦合的问题,并且对类系列繁多无从下手,那么我们想起了一种方法,那就是抽象类,建一个抽象工厂,抽象工厂里的方法都是根据系列类的差异区分出 ...

  3. [LeetCode] House Robber 打家劫舍

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  4. Underscore 整体架构浅析

    前言 终于,楼主的「Underscore 源码解读系列」underscore-analysis 即将进入尾声,关注下 timeline 会发现楼主最近加快了解读速度.十一月,多事之秋,最近好多事情搞的 ...

  5. C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码

    最近做项目需要解析二维码图片,找了一大圈,发现没有人去整理下开源的几个库案例,花了点时间 做了zxing,zbar和thoughtworkqrcode解析二维码案例,希望大家有帮助. zxing是谷歌 ...

  6. 5sing分析

    0x1.抓包数据:用fiddler抓取不到,用smartsniff [6/26/星期日 18:05:04:391]GET /user/login?username=15081515272&pa ...

  7. Python文件读写

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的 文件打开模式 模式 意义 r 文本只读 w 文本只写 rb 二进制读 rw 二进制写 打开文件 选择一个模式打开一个文件 ...

  8. 一次kubernetes资源文件创建失败的排查

    今天在jenkins中创建kubernetes的rc时,检查目标yaml文件时报出如下错误: + /opt/jenkins/kube/kubectl -s http://10.xx.xx.xx:808 ...

  9. [转]Android自定义控件三部曲系列完全解析(动画, 绘图, 自定义View)

    来源:http://blog.csdn.net/harvic880925/article/details/50995268 一.自定义控件三部曲之动画篇 1.<自定义控件三部曲之动画篇(一)—— ...

  10. js小练习去掉指定的字符组成一句话输出

    今天在codewar做练习题时,要求写一个函数把一个字符串去掉WUB这些多余的字符然后把剩下的组成一句话输出,如传入"WUBAWUBBWUBCWUB"后返回"A B C& ...