8

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

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

4

6 回答 6

13

您是担心 hotcopy 还是担心每周只备份一次?

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

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

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

于 2008-11-21T20:34:39.003 回答
8

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

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

于 2008-11-21T17:18:45.233 回答
2

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

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

恢复(由于粗心删除存储库中的目录,我们不得不做两次)相对简单:获取最新的完整备份,恢复它。将增量应用到最后一个修订版。

我还没有研究过 1.5 在这方面的改进/更改,但我相信类似的计划对你很有效。

于 2008-11-21T16:58:16.537 回答
2

称我为老派,但是对分区进行子版本控制然后按计划重影呢?

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

添加

我最近一直在使用 svnadmin 'dump' 命令。这很像 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 的备用方法。在它们之间,您应该能够恢复回购。

PS Ken,看起来 svn-backup-dumps.py 已移至此处:http: //svn.apache.org/repos/asf/subversion/trunk/tools/server-side/svn-backup-dumps.py

于 2009-11-03T12:45:06.110 回答
1

如果您在先前未损坏的备份之上热复制损坏的存储库,那么是的,您将丢失未损坏的备份。

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

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

于 2008-11-24T19:23:40.250 回答
-1

过去我只靠热拷贝就运气不好。如果代码在一天中多次更新和提交,则可能值得采用更深入的备份策略。

于 2008-11-21T16:29:12.647 回答