工作随笔——使用svnsync实时备份SVN版本库
前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了。。。。这TMD什么运气!
花费了点时间研究了下svn自己的同步工具。写个日志记录下。
注意:svnsync要求svn版本1.4+
下面的内容来自svnbook-1.4
svnsync svnsync是Subversion的远程版本库镜像工具,它允许你把一个版本库的内容录入到另一个。 在任何镜像场景中,有两个版本库:源版本库,镜像(或“sink”)版本库,源版本库就是svnsync获取修订版本的库,镜像版本库是源版本库修订版本的目标,两个版本库可以是在本地或远程—它们只是通过URL跟踪。 svnsync进程只需要对源版本库有读权限;它不会尝试修改它。但是很明显,svnsync可以读写访问镜像版本库。
警告 svnsync对于不能作为镜像操作一部分的修改非常敏感,为了防止发生这个情况,最好保证svnsync是唯一可以修改镜像版本库的进程。
svnsync选项 --config-dir DIR 指导Subversion从指定目录而不是默认位置(用户主目录的.subversion)读取配置信息。
--no-auth-cache 阻止在Subversion管理区缓存认证信息(如用户名密码)。
--non-interactive 如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息。
--password PASS 指出在命令行中提供你的密码—另外,如果它是需要的,Subversion会提示你输入。
--username NAME 表示你要在命令行提供认证的用户名—否则如果需要,Subversion会提示你这一点。
来源SVN:192.168.2.5
备份SVN:192.168.3.10
- 创建备份空版本库
$ svnadmin create svn-mirror
配置来源、备份SVN,创建用户:syncuser
请确认syncuser用户对备份SVN有写入权限。对来源SVN有读取权限。且密码相同。
- 配置备份SVN的pre-revprop-change hook
#!/bin/sh USER="$3" # 限制只有syncuser用户才能提交版本属性修改到此版本库
if [ "$USER" = "syncuser" ]; then exit ; fi echo "Only the syncuser user may change revision properties" >&
exit # 当然某些网络教程说的是你可以直接清空然后写入exit 0 ,这种方法虽然可以做,但是注意svnbook中的这句话:
# svnsync的通讯议对于源和目标版本库版本历史的不一致非常敏感,因此,虽然svnsync无法要求目标版本库是只读的,[34]最好的办法就是只允许镜像进程修改目标版本库内容。(PS:镜像==来源SVN 目录==备份SVN) # [34] 实际上,它不是真的完全只读,或者svnsync本身有时间将版本库历史拷入。 配置备份SVN的start-commit hook【可选,但建议配上】
#!/bin/sh USER="$2" # 限制只用syncuser用户才能提交版本修改到版本库
if [ "$USER" = "syncuser" ]; then exit ; fi echo "Only the syncuser user may commit new revisions" >&
exit初始化备份SVN
$ svnsync initialize http://192.168.3.10/svn-mirror \
http://192.168.2.5/Dev-rep \
--username syncuser --password syncpass
Copied properties for revision . # initialize 可以简写为 init 所以上面的命令可以写作如下:
$ svnsync init http://192.168.3.10/svn-mirror \
http://192.168.2.5/Dev-rep \
--username syncuser --password syncpass
# 注意
# 提供给svnsync的URL必须是指向目标和源版本库的根目录,这个工具不支持对版本库子树的镜像处理。在备份SVN测试数据同步
$ svnsync synchronize http://192.168.3.10/svn-mirror \
--username syncuser --password syncpass# 注意
# svnsync的最初版本(在Subversion 1.4)有一些缺陷—-用来认证的--username和--password命令行参数同时作用于源和目标版本库。
# 显然,我们无法保证同步的用户认证信息是相同的,如果不一样,用户使用非交互模式(--non-interactive选项)来运行svnsync时会遇到这个问题(PS:也就是认证无法通过)。
# 现在有趣的部分开始了,通过一个单独的子命令,我们可以告诉svnsync将所有镜像的修订版本从源版本库拷贝到目标版本库。
# [35]svnsync synchronize子命令会查看目标版本库特定修订版本的属性,并且检测同步的版本库是哪一个,以及最新镜像的修订版本是0。然后它会查询源版本库,检测其最新的修订版本。
# 最后,它会询问源版本库服务器来开始重演从修订版本0到最新修订版本。svnsync从源版本库服务器得到返回的结果,然后将其作为新的提交转发到目标版本库服务器。 # [35] 要预先警告一下,尽管对于普通读者只需要几秒钟就可以理解下面的输出,而对于整个镜像过程花费的时间可能会非常长。在来源SVN配置post-commit hook,启用实时备份
$ svnsync synchronize --non-interactive http://192.168.3.10/svn-mirror \
--username syncuser --password syncpass # --non-interactive 非交互模式,如果程序需要参数,让程序自行处理- 异常处理
- svnsync: E165006: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook请配置pre-revprop-change hook
- Failed to get lock on destination repos, currently held by 'localhost.localdomain:d1dfeaac-b028-4484-a1ec-ae455ba090e1'
使用 svnsync synchronize 同步时异常终止。如:机器停电,断网等。
$ svn propdel svn:sync-lock --revprop -r HEAD http://192.168.3.10/svn-mirror
- svnsync: The requested report is unknown.
这个错误一般不会遇到,svnsync只适用于1.4+版本。请升级该SVN。
好了,svn实时备份就到这儿。如有疑问,请留言。
工作随笔——使用svnsync实时备份SVN版本库的更多相关文章
- 使用svnsync实时备份SVN版本库
前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了....这TMD什么运气! 花费了点时间研究了下svn自己的同步工具.写个日志记录下. 注意:svnsync要求 ...
- 用svnsync 同步备份 svn 版本库 从一台服务器到另一台服务器
如用svnsync 同步备份两台机器的svn .(就以linux服务器到windows服务器为例子) 要同步的项目名称:source_svn svn 版本库1 .4 以上 源目录: ...
- 在windows上自动备份SVN版本库及定时删除
下面的脚本是在windows SVN的备份策略,采用的是hotcopy的方法 方案一: 1.先创建一个fullBackup的脚本:fullBackup.bat echo off rem Subvers ...
- SVN版本库备份和恢复
1.版本库备份 1.1.svnadmin dump方式备份 此方法借助的是Subversion官网推荐的svnadmin dump备份方式,它的优点是比较灵活,既可以进行全量备份又可以进行增量备份,并 ...
- SVN版本库的备份及迁移
备份某个版本库:打开控制台窗口 1.备份某个版本库: svnadmin dump myrepos > dumpfile //将指定的版本库导出成文件dumpfile eg:svnadmin du ...
- python实现备份gitlab版本库并更改文件名
脚本的功能是实现备份gitlab版本库,并修改备份后的文件名,成功后发送邮件至相关负责人,脚本如下: #!/usr/bin/env python # -*- coding:utf-8 -*- impo ...
- svn版本库更新后自动同步到www
注意:www目录一定要用SVN服务器 checkout出Repositories的代码 步骤: (1)新建www根目录 mkdir -p /data/www/lehuo (2)在www根目录下检出(c ...
- TortoiseSVN和VisualSVN-Server的配置使用,外网访问SVN版本库
TortoiseSVN和VisualSVN-Server的配置使用,外网访问SVN版本库 SVN客户端程序:TortoiseSVN SVN服务器程序:VisualSVN-Server ######## ...
- SVN版本库(访问权限)配置实例笔记
http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...
随机推荐
- JAVA 8 默认方法-Default Methods
什么是默认方法-Default Methods 简单的说,就是可以在接口中定义一个已实现方法,且该接口的实现类不需要实现该方法: 如下示例: interface GreetingService { v ...
- Jenkins用户配置(安装好jenkins后,怎么配置用户管理、权限管理)
直奔主题 安装完成后,先开启用户配置 1. 系统管理-->配置权限 2. 启用安全,并选中"安全矩阵" 如上,搞定: 可以按用户去设置各项目的操作权限了: 轻松实现,jen ...
- Oracle shutdown immediate遭遇ORA-24324 ORA-24323 ORA-01089
一数据库服务器执行shutdown immediate时,遇到了下面ORA错误,如下所示: $ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - ...
- Sql Server之旅——第八站 复合索引和include索引到底有多大区别?
周末终于搬进出租房了,装了宽带....才发现没网的日子...那是一个怎样的与世隔绝呀...再也受不了那样的日子了....好了,既然网 安上去了,还得继续我的这个系列. 索引和锁,这两个主题对我们开发工 ...
- Linux服务器下nginx的安全配置
1.一些常识 linux下,要读取一个文件,首先需要具有对文件所在文件夹的执行权限,然后需要对文件的读取权限. php文件的执行不需要文件的执行权限,只需要nginx和php-fpm运行账户的读取权限 ...
- linux的“自动化”
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...
- 模块module
python中的Module相当于C++中头文件和命名空间的组合体,便于代码的组织,任何一个python代码的文件都是一个Module,都可以被其他模块import import,from...imp ...
- 五、Android学习第四天补充——Android的常用控件(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...
- python enumerate函数用法
enumerate函数用于遍历序列中的元素以及它们的下标 i = 0 seq = ['one', 'two', 'three'] for element in seq: print i, seq[i] ...
- DirectX API 编程起步 #01 项目设置
=========================================================== 目录: DirectX API 编程起步 #02 窗口的诞生 DirectX A ...