分类: 项目管理
2014-10-11 12:48:31
使用svnsync备份很简单,步骤如下:
一、在备份机上创建一个空库:svnadmin create SMP
二、更改该库的钩子脚本pre-revprop-change(因为svnsync要改这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本):
cd SMP/hooks;
cp pre-revprop-change.tmpl pre-revprop-change;
chmod 755 pre-revprop-change;
vi pre-revprop-change;
将该脚本后面的三句注释掉,或者干脆将它弄成一个空文件。
三、初始化,此时还没有备份任何数据:
svnsync init file:///home/backup/svn/svnsync/SMP/
语法是:svnsync init {你刚创建的库url} {源库url}
注意本地url是三个斜杠的:///
四、开始备份:
svnsync sync file:///home/backup/svn/svnsync/SMP
这是就一个个版本进行备份了。
五、修改目标服务器新库UUID(可选,修改了UUID后客户端就只需要relocate就可以了,不用重新全部下载)
1) 查看源服务器svn库uuid :
svnlook uuid 库名
也可以直接进入svn库db目录查看uuid文件
2) 在目标服务器
执行更改uuid命令 :svnadmin setuuid 库名 uuid
这里的uuid为源服务器svn库的uuid
附录:
可能的报错一:
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
Failed to get lock on destination repos, currently held by 'bug1.corp.scmbbs.com:0c424c20-2e3b-0410-bd34-7fdd53c25d02'
svnsync: Couldn't get lock on destination repos after 10 attempts
这个时候可能属性被锁了,删掉属性:
svn propdel svn:sync-lock --revprop -r0 file:///home/backup/svn/svnsync/SMP
删除成功后,再试一遍基本就可以了。
如果反复操作都是同样错误的话,有可能是你的svn安装的有问题,重新安装一遍就好了,俺就是这样。
可能报错二、
svnsync: REPORT request failed on ''
svnsync: The requested report is unknown.
这是因为你源库的版本太低了,svnsync所需要的函数Report是svn1.4后加入的。没办法,对你的库进行升级后才能备份。
由于执行svnsync sync file:///home/backup/svn/svnsync/SMP 过程中容易出现错误一,避免中途人工干预,我写了一个脚本,来自动修复错误。脚本里面的路径自己来修改吧,我的环境是本地备份到另外一个硬盘。
可能报错三、
源端svn某一个节点上传了大量数据,通过svnsync的时候就可能导致timeout的情况。在这种情况下可以采用以下的方法解决:
1.源库\db\revprops和源库\db\revs目录里面相应的版本(例如1)拷贝到镜像库的相应目录下面
2.修改镜像库\db\current文件,改为1
3.运行svnsync sync https://镜像库
这时提示 have you commited to the destination without using svnsync?不管,继续4
4.运行
svn proplist --revprop -r 0 https://镜像库
svn propset --revprop -r 0 svn:sync-last-merged-rev 1(第2步中的版本号) https://镜像库
svn pdel --revprop -r 0 svn:sync-currently-copying https://镜像库
重新再执行同步即可:svnsync sync https://镜像库