SVN Server利用svnsync和hooks实时同步单向备份版本库及问题解答

前言:

      在项目管理中,计划是每周进行一次增量备份,但因为人手不足等种种原因,备份工作总被忽视。项目越进行到后期越是害怕SVN版本服务器宕机。今天是休息日,我决定抽出小半天个人休息时间把热机备份搞起来,从此宕机无忧,结果早上10点搞到现在。
      在进行热机备份前,先介绍一下A、B两台主机的情况。A主机为业务繁忙的生产机,搭配Server2008R2操作系统,安装有SVN服务版4.0.4,上面有同一项目的若干库。A主机的IP为172.16.10.22. A主机上有用户kzj,并且各库已将读写权限授予用户kzj。我们挑TestPM库来练习举例热机备份。


 
   B主机为新置办的备份机,搭配Server2008R2操作系统,上面仅安装SVN和防病毒应用。B主机的IP为172.16.10.23. 

正文开始:

要完成SVN热机备份,我们先从B主机开始着手做。

以下操作若无特别说明均在B主机上进行。
1.    创建一个FSFS类型的仓库,库的名字叫backup3,初始化结构选Empty,权限选Nobody。
  

2.    创建一个备份专用账号svnsync,密码svntest
(实际生产中记得用强密码,并做好保密措施)。


3.    进入backup3的权限设置,授权svnsync账号读写backup库。

4.    修改backup3库对应hook文件夹下的pre-revprop-change.tmpl文件后缀名为.bat,内容为exit 0


执行命令初始化库的状态

svnsync init https://localhost:443/svn/backup3 https://172.16.10.22:8443/svn/TestPM --username svnsync --password svntest

 


如上图,仅在第一次会弹提示,键入P,表示永久记住身份。

如果以前身份认证过,就不会有这个提示,如下图。


至此B主机的准备工作已经完成。
B主机已处于就绪状态,我们接下来操作A主机。


以下操作若无特别说明均在A主机上进行。

我们看到仓库中有好几个仓库,我们挑TestPM来举例。

我们使用cmd命令打通A机器TestPM库到B机器backup库。
执行命令

svnsync sync https://172.16.10.23:443/svn/backup3

 
如上图,仅在第一次会弹提示,键入P,表示永久记住身份,然后是A主机的管理员密码,B主机的SVN仓库的用户名和密码等信息。
如果以前身份认证过,就不会有这个提示。如下图
 
第一次备份完成。

现在TestPM已经关联上backup3,我们接下来添加钩子。让每次TestPM版本号变动时都能自动同步到backup中,也就是热机备份。我们借助hooks实现这个功能。
修改TestPM中hooks文件夹内的post-commit.bat文件,内容见图片。
文本格式:【svnsync sync –-non-interactive 备份仓库url】
例子:不输用户名和密码

svnsync sync –-non-interactive https://172.16.10.23:443/svn/back3


 
如果没有意外,至此A主机的准备工作已经完成。

我们测试一下,我们在个人电脑上提交文件到A主机, B主机仓库是否会自动同步记录。


这个过程往往会因为A主机上的权限问题而报错。
  


解决方法:
   这个是因为证书问题,在终端执行  【svn  ls  https://svn仓库地址】 然后输入p就行。这个命令是让永久记作登录凭证。
如果不行还可能是A主机读文件权限问题,这是因为SVN服务默认使用network用户,该账号没有读取本地文件的权限,我们需要修改默认使用的network用户为管理员用户,然后重启服务。


至此,SVN热机备份所有步骤已完成。


总结:  

   这个是单向同步,备份库不能有任何人为修改版本号,
   因为任何人为修改备份仓库都会照成版本冲突,导致版本迭代无法自动完成。
   网上正确的SVN热机备份教程不多,CSDN上的博客文章或多或少都有些小错误,
   细心的同学应该可以发现我的部分命令和网上的其他教程有所不同。
   还有就是本教程对步骤进行了精简。   
   如果你在操作过程中遇到问题,或者有更简单的步骤实现热机备份,欢迎在下方留言告知我。

发布了96 篇原创文章 · 获赞 172 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/ai_64/article/details/101630904