场景:为了保证svn服务使用的稳定性,减少物理原因导致对svn数据和服务的影响
处理方案:使用svn提供的svnsync工具实时做一次备份
特点:低成本稳定保护数据,但无法对svn服务的稳定性提供帮助,如正在使用svn发生物理丢失,只能快速配置新svn服务
具体操作:
整体思路:
步骤1
配置主svn环境,可以http访问 ,访问地址为:192.168.16.194:82/svn/proj
配置从svn环境, 可以http访问,访问地址为:192.168.16.18/svn/proj_b
如果是window 可以使用virsualsvn 进行快速安装配置;同时在服务中找到服务virsualsvn server服务 用系统管理身份运行
如果是centos环境需要
1、配置subversion;
2、配置apache(配置关键点 mod_dav_svn.so 和mod_authz_svn.so, 以及location svn的配置)
3、配置nginx(可选)
4、创建的库路径 如:/home/www/svndata 要配置权限和用户组,关键点:
chown -R Apache:apache svn库
chmod -R 757 svn库
步骤二
svn版本是 主库同步到从库,故先到从库进行配置
1、从库已新增为proj_b
进入proj_b/hooks新增并修改pre-revprop-change
新的脚本如下:
exit 0
2、初始化
在机器B上
svnsync init file:///svn/proj1 http://192.168.16.194:82/svn/proj1
会提示输入用户名和密码,这里提供的用户名和密码
是可以完全读取http://192.168.0.1/svn/proj1的用户名和密码
3、同步
在机器B上
svnsync sync file:///svn/proj1
依然会提示输入用户名和密码,不过,你可以在这个命令之后加上 username 、password参数,
例如svnsync sync file:///svn/proj1 –username username –password password
4、主库(来源库)实时备份同步
在主库的 hooks下,启用 post-commit (如果windows 则用post-commit.bat)
set SVN="D:\Program Files\VisualSVN Server\bin\"
%SVN%svnsync.exe sync --non-interactive http://192.168.16.181/svn/proj_b --username *** --password ***
(centos)
svnsync synchronize --non-interactive http://192.168.16.181/svn/proj_b --username syncuser --password syncpass
5、检查从库和主库的版本, 测试主库的实时备份功能
过程中碰到的几个问题
1
如果在同步的时候遇到下面的提示,可能是由于原始版本库同时正在提交:
从目标版本库获得锁失败,当前被“xxxxx”持有
如果是在svn中,可以使用svn cleanup来解除锁定。但是svnsync并没有这个功能。我们可以使用下面的代码来解除锁定:
svn propdel svn:sync-lock --revprop -r 0 file:///var/svn/project1/
# 删除属性 “svn:sync-lock” 于版本库版本 0
2
在主库上配置 pro-commit.bat 文件后,执行bat 文件或者提交新的版本,提示:svnsync: warning: W200007: Target server
does not support atomic revision property edits; cons
pgrading it to 1.7 or using an external locking program
svnsync: E175008: While handling the ‘svn:sync-lock’ property on ‘/svn/proj_b/!svn/bln/0’:
svnsync: E175008: Can’t open file ‘/home/www/svndata/proj_b/db/write-lock’: Permission denied
该问题发生的原因 说明目标库的对应文件的权限设置有问题;
chown -R apache:apache 备份库
chmod 757 备份库
3
如果备用库,被单独修改了或者增加了版本
在备库环境下:
svn propset --revprop -r0 svn:sync-last-merged-rev 40482 http://slave.heylinux.com/svn-proxy-sync/project1
再尝试 svnsync sync file:///var/svn/project1/
具体操作参考链接:
http://www.cnblogs.com/jifeng/p/4297709.html 部署svn