使用 rsync 备份 Subversion 存储库

使用 rsync 备份 Subversion 存储库

CentOS 5.3 颠覆 1.4.2

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

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

我们的要求是每天凌晨 12 点进行备份。

但是,我不确定 Subversion 存储库是否可以用于设置 rsync。

我是否需要执行热复制或 svn dump、syn sync 等操作?还是只需按原样复制存储库?

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

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

非常感谢你的建议,

答案1

您需要确保在备份过程中存储库完全没有更改(即新的签入)。这可以通过多种方式安排,但最简单的方法可能是使用 hotcopy 制作存储库的新副本(该过程尊重 subversions 版本控制/锁定系统,因此即使有人正在使用它,您也会获得存储库的一致时间点副本),然后使用 rsync 将该副本备份到远程站点。

rsync 支持同步完整的目录结构,并且如果远程端可以通过 SSH(或类似方式)联系,则不需要以守护进程模式运行 rsync(只需要安装它以便可以通过 ssh 调用它)。

您需要的 rsync 命令可能是以下形式:

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

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

答案2

我最喜欢使用 svnsync 来备份 svn repos。它是增量的,因此您不会在 12am 备份之间丢失数据。它很快(足够快),因为它将对实时 repo 的提交重放到备份 repo 上。缺点是您必须为每个 repo 设置同步 - 您不能(与 rsync 不同)复制整个目录结构。它也不会复制您的钩子和其他设置,因此您需要单独复制它们。我每小时为我的 repos 运行一次它,但我尝试在 post_commit 钩子中运行它(它也有效)以确保所有提交都始终备份。

虽然设置起来很容易,但创建一个空白的 repo 来保存每个备份并设置 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 服务器。

相关内容