A,192.168.8.10(主)

B,192.168.1.89(备)



项目需求,生产环境要求svn服务器实现热备机制,于是就想到了svn自带的svnsync机制,操作流程如下:


1、在要备份的机器上(192.168.8.10)建立版本库

mkdir -p /nfs/svn/backup

svnadmin create /nfs/svn/backup/


2、进入备份机器(192.168.1.89)版本库test下的hooks目录。

cd /nfs/svn/backup


3、创建pre-revprop-change文件

cd /nfs/svn/backup/hooks


cp pre-revprop-change.tmpl pre-revprop-change


4、修改pre-revprop-change权限,更改为755

chmod 755 pre-revprop-change


6、修改pre-revprop-change内容

为 echo “Changing revision properties other than svn:log is prohibited” >&2

exit 0(1修改为0)


说明如下:

原脚本的意思是如果修改的是svn:log属性,将允许修改,返回0;否则,不允许,返回1

我们要将它改为允许修改所有的属性,在脚本中直接返回0


7、在备份机器上执行同步初始化操作

svnsync init file:///nfs/svn/backup svn://192.168.8.10/ --username backup --password backup


会出现以下信息:

Copied properties for revision 0.



8、在备份机器上执行同步操作

svnsync sync file:///nfs/svn/backup


9、在备份的机器上启动svn 

sudo svnserve -d -r /nfs/svn/backup/

其中 -d 表示守护进程, -r 表示在后台执行

/nfs/svn/backup/ 是目录


10、在写一个svn备份脚本添加到任务计划里面

cat svnbackup

#!/bin/bash

svnsync sync file:///nfs/svn/backup

chmod +x svnbackup


11、crontab -e

*/30 * * * * sh /nfs/svn/backup/svnbackup.sh

每30分钟更新一次备份



会出现以下信息:

Transmitting file data .

Committed revision 1.

Copied properties for revision 1.

Transmitting file data .

Committed revision 2.

Copied properties for revision 2.

Transmitting file data .

Committed revision 3.

Copied properties for revision 3.



出现以上信息就说明同步成功了。





注意事项:

svnsync 是 subversion 一个同步工具。当设定好hook并且做过初始化的动作之后,往后的commission都会同步到所设定的另外一个repository中。然而有的時候因为网络断线或者其他因素导致sync程序中止,则在下一次执行svnsync的时候可能会出现以下的问题:


Failed to get lock on destination repos,currently held by 'linux-kbp0:07f6a180-ea47-11de-8346-ddb1d640fb86'

Failed to get lock on destination repos,currently held by 'linux-kbp0:07f6a180-ea47-11de-8346-ddb1d640fb86'

Failed to get lock on destination repos,currently held by 'linux-kbp0:07f6a180-ea47-11de-8346-ddb1d640fb86'


这个时候可能属性被锁了,删掉目的版本库的属性,解决办法如下:

删除SVN仓库修订号0,svn:sync-lock的保护


svn propdel svn:sync-lock --revprop -r 0

file:///nfs/svn/backup(目的同步库)