使用rsync来备份subversion版本库

CentOS 5.3 subversion 1.4.2

我正在寻找一个策略来备份我们的Subversion版本库。 我们在这样一个目录中有大约30个存储库:

repos/ /DEVS /reps1 /reps2 /WEB /reps3 /reps4 /reps5 TOOLS/ LIBS/ /reps6 /reps7 LOGS/ /reps8 

我们的要求是做每日上午12点运行备份。

但是,我不知道为了设置rsync的颠覆储存库。

我需要做一个hotcopy或svn转储,syn同步等? 或者我只是复制存储库,因为它们是?

我以前从未使用rsync,所以我们将备份我们的存储库到远程服务器。 我需要在两台机器上运行rsync守护进程吗?

rsync可以recursion地备份repos目录下的所有存储库吗?

非常感谢您的任何build议,

您需要确保在进行备份时,存储库完全不会更改(即新的签入)。 这可以通过多种方式来安排,但最简单的方法是使用hotcopy来创build一个新的版本库(这个过程考虑了版本控制/locking系统,这样你就可以得到一个一致的时间点即时副本,即使人们正在积极使用它),然后使用rsync备份到远程站点。

rsync支持同步完整的目录结构,如果远程端通过SSH(或类似的)可以联系,你不需要在守护进程模式下运行rsync(只需要安装,这样就可以通过ssh调用)。

你需要的rsync命令可能是这样的forms:

 rsync -a /path/to/hotcopy/copy [email protected]:/path/to/backup/location 

它以user身份通过SSH连接到remote.host ,启动一个rsync进程,并安排传输,然后在closuresSSH会话之前将其closures。 -a选项(–archive的简写)包括许多选项,包括导致rsync在整个目录结构上recursion操作的选项。 您可能还想添加--compress选项,因为毫无疑问,您的存储库的内容将会压缩,从而为您节省一些带宽。 有关更多详细信息,请参阅rsync手册页。

我最喜欢的方式来备份svn回购是使用svnsync。 它的增量,所以你不会失去你的12am备份之间的数据。 它的快速(足够),因为它重播承诺现场回购到备份之一。 缺点是你必须为每个repo设置同步 – 你不能(不像rsync)复制整个目录结构。 它也不会复制你的钩子和其他设置,所以你需要分别复制它们。 我每小时运行它的回购,但我已经尝试在post_commit挂钩(这也是),以确保所有提交都备份始终运行它。

它很容易设置,创build一个空白的回购保存每个备份和设置revprop更改挂钩,以允许revprop更改(以便您可以同步它们)

 svnadmin create c:\backup_xyz echo exit /b 0 > hooks/pre-revprop-change 

然后初始化同步(在备份服务器上运行svnsync)以便更改:

 svnsync init svn://svr/svn/remote_live_repo file:///c:/local_backup_repo 

或者如果你想推送到远程服务器

 svnsync init file:///c:/local_live_repo svn://svr/svn/remote_backup_repo 

然后开始同步

 svnsync sync file:///c:/local_backup_repo 

简单! 如果它崩溃了,你必须重新启动一个中断同步,只需删除该属性,说什么是当前的同步修订版本,然后重试:

 svn propdel svn:sync-lock --revprop -r 0 file:///c:/local_backup_repo 

您可以使用svnadmin hotcopy进行备份或rsync – 但是如果您使用rsync,则应在执行备份时停止repo服务器。