11

我对 Node + Mongo 还很陌生,我正在尝试查看是否有一种方法可以在每次进行新提交时备份我的数据库。这可能吗?我知道如何使用 mongodump 进行备份,但我希望避免每次推送到服务器时都必须这样做。如果数据目录的想法不起作用,是否可以编写一个备份到我的节点服务器存储库的脚本,然后每次运行它时进行推送?

我在网上找不到任何与 git 和 mongo 相关的东西,所以我想我可能看错了/不明白什么。任何帮助将不胜感激!谢谢!

4

2 回答 2

8

Git 钩子

如果你想在每次提交时触发一些动作,git确实有一个“钩子”的概念,允许你调用可执行脚本。

例如,您可以根据需要在成功提交之前或之后添加一个pre-commitpost-commit钩子来运行备份(包装在 shell 脚本中)。mongodump

数据目录

具体来说,我可以在 github 存储库中包含 mongo 数据目录吗?

我不会在您的 Git 存储库中包含数据目录,因为当 MongoDB 运行时数据文件被锁定以进行独占访问。复制正在运行的mongod实例使用的文件可能会导致“备份”损坏或无法使用。

二进制数据文件也会使您的存储库显着膨胀,因为它们(如 MongoDB 2.6)采用未压缩的二进制格式,包括一些预分配/未使用的存储。如果您确实想在版本控制中存储完整的数据备份,我会在检查版本控制之前使用 zip 或 tar+gzip备份并压缩生成的输出目录。mongodump

备择方案

在每次提交时进行完整的数据库备份可能会占用大量时间和磁盘空间。根据您对每次提交时备份数据库的关注/要求,可以考虑的一些替代方法是:

  • 如果您担心恶意提交删除或更改数据,具有延迟辅助节点的 MongoDB 副本集部署将允许您保持较旧的数据视图可用(例如,延迟两个小时)。这不会取代完整的备份策略,但可能有助于保持您的开发工作流程更加敏捷,同时仍然提供一些错误提交的数据恢复措施。

  • 如果您更关心数据结构或特定所需数据(而不是完整数据库)的变化,您可以使用迁移框架(例如mongo-migrate)。使用显式的“迁移脚本”来更改数据结构允许您确保数据和结构与您的代码对给定检出的期望相匹配(相关的 .migrate 脚本将包含在代码提交中)。如果您与开发团队合作并希望确保每个人都有相似的数据(不检查完整转储),这也是一种有用的方法。

  • 正如@vmr 提到的,您可以使用 MMS(MongoDB 管理服务)之类的备份服务进行定期备份。云版彩信备份可以恢复到最近24小时内的某个时间点。

于 2014-12-29T06:36:07.360 回答
5

您所需要的只是 MMS(Mongo 监控服务)。它是 MongoDB 提供的基于云的连续备份服务(加上许多自动化,如按需恢复、监控)。使用 MMS 每次提交时,数据库都会增量备份。还可以轻松部署和监控独立、副本集或分片设置。

与 mongodump 相比,MMS 更好,因为它倾向于进行增量备份而不是整个数据库备份。编写一个在每次提交时执行 mongodump 的脚本都可以,但是每次要备份新的提交时,您都必须删除旧的备份文件. MMS 通过管理进入 DBA 角色的所有这些样板工作(编写如上所述的脚本)来减少这种 devops 开销。

查看此链接了解更多信息:彩信

于 2014-11-08T08:18:33.090 回答