备份源机器:192.168.1.51
备份源目录:d:\Repositories\
备份源项目:该目录下所有svn项目
备份方式:svnsync热备
备份目标机器:我的本机192.168.1.44
备份目标目录:G:\Repositories\
备份操作(命令均在命令行,svn安装目录的bin目录中进行)
1,192.168.1.44机器安装相同版本svn服务器;
2,目标机器创建与源机器待备份项目相同的版本库;
3,目标机器所有版本库中的hooks目录,建立一个pre-revprop-change.bat空文件;(目的是允许修订版本属性的修改)
4,目标机器创建用于备份的账号密码,同时为源机器创建一个相同的账号。
5,为目标机器和源机器创建的同一账号,赋予所有待备份项目根目录的读写权限(包括源机器和备份机器)
6,初始化目标机器的备份数据,命令:svnsync init(ialize) http://192.168.1.44/svn/版本库名称 http://192.168.1.51:81/svn/版本库名称 --username 账号 --password 密码,回车即可
显示:Copied properties for revision 0.表示初始化成功。
注意:需要为每一个版本库进行这个操作。
7,在目标机器进行数据同步:svnsync synchronize http://192.168.1.44/svn/版本库名称 --username 账号 --password 密码,回车即可。(这个同步会花比较长的时间)
8,源机器所有版本库中的hooks目录,创建post-commit.bat文件,用于实时备份(这个实时不准确,需要加到系统的计划任务),文件内容如下:
echo off
set SVN_HOME="C:\Program Files\VisualSVN Server"#(svn服务的安装目录)
%SVN_HOME%\bin\svnsync sync --non-interactive --username=账号 --password=密码 http:192.168.1.44/svn/版本库名称
9,将步骤8的实时备份文件,加入到系统的计划任务中,定时执行
数据同步时报错:svnsync: E000022: Destination repository has not been initialized
哈哈,这个有点巧,百度之后有个词条是翻译,直接告诉我是目标库未初始化,回去看了一下,要做数据同步的那个库,漏掉做初始化了。初始化之后,就可以同步正常了。(英文不过关的尴尬)
12月13日
后期,在备份机器进行数据同步,或者使用ip地址在小乌龟上查看项目的时候,会出现卡住的情况,一直加载不到项目列表。前期一直没有考虑其他问题,因为我同时在两个机器上创建了备份,而第1个备份机器出现项目无法访问的情况,是在创建了第2个备份之后,于是一直以为是两个备份之前产生了什么问题,但是也一直没有找到问题原因。
今天,因为要手动同步数据,我便在第1个备份机器命令行操作,一直没有关。等了很长时间,提示信息,如下:
svnsync: E175012: Unable to connect to a repository at URL 'http://192.168.1.44/svn/meip'
svnsync: E175012: Connection timed out
我便转为使用127.0.0.1来加载,结果是成功的。
再在命令行使用ipconfig -all,发现我本机的ip地址,不知道从什么时候开始,已经由原来的44,变成了17。(本地是动态ip)
下次如果遇到相同的问题,比如在命令行同步数据一直没有反应,或者提示连接超时;跑小乌龟也是一直没有反应,可以查一下是不是ip地址发生了变化
2019年1月25
1,同步属于增量同步,也就是说,如果同步过程意外中断也不用担心,因为中断前同步的数据都已经在svn中了,再次同步,只是将剩余未同步的进行同步。
2,同步在后台加载过程中未继续等待而人为中止,再同步的时候会提示上一次的同步操作被锁住了,提示信息:Failed to get lock on destination repos, currently held by “……”,这时,使用命令解锁即可。在命令行输入:svn propdel svn:sync-lock --revprop -r 0 http://ip:port/svn/project 解决
2019年3月1日
时间过得可贼快啊,2019年,已经过去6分之一了,剩下的6分之五,要好好干!
3月第一天,就解决了一个问题,也是非常开心了。
问题描述:在目标机器进行同步操作时,提示目标机器积极拒绝。我一看IP地址,发现跟现在源机器的iP地址不一样,现在的源地址我去掉了端口。(补充说明一下,我在目标机器做初始化和同步在先,源地址变更在后,因此在源地址变更之后,我并未预见同步会出现这种情况,我还以为会同步更新的呢。)
首先尝试了再次初始化,提示信息如下:即要初始化的目录已经包含了相关的版本历史
svnsync: E000022: Destination repository already contains revision history; consider using --allow-non-empty if the repository's revisions are known to mirror their respective revisions in the source repository
在上面的提示信息中,提到一个命令“--allow-non-empty”,我在网上找到了这个命令的操作方法,如下:
svnsync init --allow-non-empty http://目标库ip/svn/库 http://源库ip/svn/库,直接回车,就可以成功更换源ip了。成功更换会提示与初始化成功类似的信息。
然后同步,就可以正常同步了。
心得:一开始网上找的--aloow-non-empty 后面跟的目标库,有人写的是用file:///目标库,但我的备份库用这个命令一直报错,后来有人写的是用http,我更换成http后,成功。