移动并升级Subversion服务器

我有一个非常老的服务器慢(Ubuntu的9.04),有很多其他的东西在它上面运行与SubVersion。

我现在打算把颠覆转移到更好的服务器上,但是当然不想丢失任何数据或历史。 大量的人可以访问SVN,我不想在他们的最后(我也将域名移动到新的服务器)的任何变化。

做这个的最好方式是什么。 在移动的同时,我也想把旧的svn版本1.5.4更新到最新的稳定版本1.7.0

在做这件事之前是否有任何可能的问题我应该知道? 任何指导,可以帮助我在这里

谢谢

  • 在目标服务器上安装最新的Subversion
  • svnadmin转储| svnadmin加载(也许后创build回购,不能召回)或
  • svnadmin hotcopy

为源服务器上的每个回购

  • 将服务器configuration文件从源移动到目标(用户,组,ACL)
  • 将目标的主机名更改为源主机名
  • 打开用于SVN端口
  • testing提交+结帐

我会build议先在新服务器上安装一个SVN 1.7.0实例。 然后,您可以开始将存储在旧SVN存储库中的所有信息复制到新的SVN信息库中。

正如David Spillet在这个答案中解释的那样,只要您不备份当前活动的存储库, rsync对于备份/复制svn存储库来说应该是完美的。 我怀疑你正在尝试备份一个有问题的活动仓库。

我猜测所报告的问题与文件丢失有关(它们在初始扫描期间存在,但在备份完成之前移动/重命名/删除),被locking,或在rsync读取时明显改变。 如果备份活动svn服务,并且在启动备份运行之前没有完全停止svn服务,您将看到大多数备份技术出现类似的错误(或更糟糕的是:相关但未报告的问题)。

在备份运行期间停止对存储库的所有访问,即使是在夜晚完成(因为您可能有在不同时间工作的远程开发人员),您可能不会select使用该存储库。 如果是这种情况,那么有几个选项,其中包括:

  1. 使用hot-backup.py来完成存储库的完全备份, 如本免费提供的带有Subversion版本控制的 部分所述,通常被认为是推荐阅读。 这不会直接适用于您的远程备份,因为它会导致每次都通过线路发送完整的repo,但您可以备份到临时本地区域,然后对该备份执行rsync (或其他任何操作)。而不是实时存储库。

  2. 如果您正在Linux上运行并使用LVM进行驱动器分区,则可以使用LVM的快照工具来执行与选项1中所述类似的function。请参阅此处和此处的技术文档示例。 这确实意味着在短时间内停止访问SNV服务的时间长度是快照需要创build的时间,但这几乎是一个问题,而不是需要停止整个备份操作的问题。

  3. 使用上面的SVN书中提到的实时存储库的增量备份。

LVM技术将比hot-backup.py -then-sync更快,但是除非您已经熟悉和熟悉LVM,否则没有大量额外的工作和学习可供您使用。 它的好处是,它几乎肯定会快得多,并且会占用更less的磁盘空间(尽pipe现在磁盘空间相当便宜)。 LVM快照在存在时会影响写入性能,但是除非您的存储库非常繁忙,并且在删除快照时无论如何在备份运行结束时性能将恢复正常,否则这种差异不太可能被察觉。

hot-backup.py方法的优点是,如果您还没有一个备份,也可以为您提供本地备份 – 如果您将“热复制”版本存储在另一台计算机上,则可以比恢复时快得多如果主机在不影响其他主机的情况下死机(例如,驱动器控制器故障),则进行远程复制。 除非您已经使用LVM并熟悉LVM,否则实现起来可能会更简单。

增量备份比这两种技术都要快,但是比hotcopy更简单 – 然后在完全灾难之后进行同步和恢复可能更复杂,除非您使用增量备份在另一端构build完整的repo副本(而不仅仅是存储增量信息)。 尽pipe如此,build议在另一端重build仓库,但是这是一种testing方式,即备份实际上是有效的 – 即使使用其他技术,您也应该定期testing备份(口头上说:备份不是一个好的备份,除非它已经过testing)。

总之,只要不备份当前活动的存储库, rsync应该是完全正确的备份或复制svn存储库 – 您需要停止某种forms的快照的服务或备份。

总而言之,请记住testing一切是否正常通过比较信息是SVN仓库,使用重定位选项,检查日志文件等