“hotcopy”对于SVN备份是否足够,还是应该担心完全转储和增量转储?

时间:2008-11-21 16:21:56

标签: svn backup

对于我个人的东西,我每周只使用一次svnadmin hotcopy命令,但对于包含许多开发人员的更多关键任务存储库来说,这还够吗?或者我应该花时间制定更严格的备份策略,包括完整备份和增量备份?

hotcopy似乎是最简单的方法,但我希望能够恢复回购,如果由于某种原因,它会被破坏。只是通过hotcopy进行转储允许我这样做吗?

6 个答案:

答案 0 :(得分:13)

您是否担心热门复印?或者您是否担心每周只备份一次?

Hotcopy将为您的存储库生成安全且完整的备份,即使其他进程(例如您的开发人员)同时访问存储库也是如此。如果您仍然不信任它,请关闭对存储库的所有访问权限,并使用通常的文件系统工具将其复制到某处进行备份。 (开发人员不会全天候工作,是吗?)

如果您担心每周一次的部分:只考虑如果在下一次备份安排前一天回购消失,会发生什么。有关系吗?如果是,请更频繁地进行备份。就这么简单。

您的存储库是否太大,无法保留数天或数周的完整备份?实施使用完全备份和增量备份的轮换备份方案。你有足够的备份空间吗?省去麻烦,只需进行完整备份。

答案 1 :(得分:8)

另一个好的策略是保留第二个SVN存储库并将其与具有svnsync的主存储库同步,通常使用提交后挂钩。

主要优点是,如果第一个存储库由于某种原因而关闭,您可以立即切换到备份存储库,并继续使用它而不会出现任何停机。

答案 2 :(得分:2)

我为企业的SVN 1.4.x存储库(当时托管在Windows上)实施了备份计划,并使用了python脚本svn-backup-dumps.py

我从svn-backup-dump.py挂钩调用post-commit来触发特定修订的增量备份。我使用schtasks使用相同的脚本安排每周“完整”备份。

恢复(由于脂肪删除存储库中的目录,我们必须执行两次)相对简单:获取最新的完整备份,然后恢复它。在最后一次修订中应用增量值。

我没有在这方面考虑过1.5的改进/变化,但我相信类似的计划对你来说也会很好。

答案 3 :(得分:2)

叫我老学校,但是如何对分区进行子版本化,然后按计划进行重影?

Davide Gualano建议的svnsync选项听起来也不错。我倾向于使用此选项来防止对驱动器进行不必要的分区(这可能也会以错误的方式破坏其他管理员,并且在我的某些VPS环境中没有意义。)

加成

我最近一直在使用svnadmin'dup'命令。这与mysql dump命令非常相似,因为它将您的存储库导出到bak create命令中。此命令可以实现为crontab /计划任务,然后作为文件复制到外部驱动器。示例命令:

svnadmin dump c:\svn\project > c:\dumps\project.bak

svnadmin load c:\svn\project < c:\dumps\project.bak

然后使用robocopy /您复制选择的工具将文件移动到另一个位置。如果要将文件完全移出repo服务器但没有对subverion的外部访问权限,这非常有用。

我还没有把它归结为一门艺术品。当我在机器之间移动这些文件时,我偶尔会得到类似'UUID不匹配'的东西。我一直在通过删除/评分项目文件夹来解决这个问题,然后使用:

svnadmin create c:\svn\project

svnadmin load c:\svn\project < c:\dumps\project.bak

这应该删除错误。您可能需要使用Eclipse或其他项目重新创建或恢复链接。如果UUID被破坏,它也可能影响使用该项目的其他人,所以这应该是一个考虑因素。

您可以将此方法用作Hotcopy的后备。在他们之间你应该能够回复回购。

P.S。肯,看起来svn-backup-dumps.py已被移到这里: http://svn.apache.org/repos/asf/subversion/trunk/tools/server-side/svn-backup-dumps.py

答案 4 :(得分:1)

如果您在先前未损坏的备份的顶部热备了一个损坏的仓库,那么是的,您将丢失未损坏的备份。

如果您对此感到担心,那么正如其他人所说,您需要轮换备份。

您也可以安排自动运行'svnadmin verify'。

答案 5 :(得分:0)

我过去运气不好,单靠热门副本。如果它是全天多次更新和提交的代码,则可能需要更深入的备份策略。