我可以使用Git备份MongoDB数据库吗?具体来说,我可以在github存储库中包含mongo数据目录吗



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

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

Git挂钩

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

例如,您可以添加一个pre-commitpost-commit挂钩,该挂钩在成功提交之前或之后运行mongodump备份(封装在shell脚本中)(视情况而定)。

数据目录

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

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

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

备选方案

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

  • 如果您担心恶意提交会删除或更改数据,那么使用延迟的辅助部署MongoDB副本集可以让您保持旧的数据视图可用(例如,延迟两个小时)。这不会取代完整的备份策略,但可以帮助您保持开发工作流程的灵活性,同时在错误提交时提供一定程度的数据恢复。

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

  • 正如@vmr所提到的,您可以使用MMS(MongoDB管理服务)这样的备份服务来进行定期备份。MMS备份的云版本可以在过去24小时内恢复到某个时间点。

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

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

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

相关内容

最新更新