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

Rya*_*vey 9 git mongodb mongodb-mms

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

我无法在网上找到任何与git和mongo有关的内容,所以我想我可能会看到这个错误/不明白的东西.任何帮助将不胜感激!谢谢!

vmr*_*vmr 5

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

MMS 比 mongodump 更好,因为它倾向于做增量备份而不是整个数据库备份。 . MMS 通过管理进入 DBA 角色的所有这些样板工作(编写如上所述的脚本)来减少这种 devops 开销。

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


Ste*_*nie 5

Git钩子

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

例如,您可以在成功提交之前或之后添加运行备份(包装在shell脚本中)的钩子pre-commitpost-commit钩子mongodump.

数据目录

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

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

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

备择方案

在每次提交时进行完整的数据库备份可能会耗费大量的时间和磁盘空间.根据您在每次提交时备份数据库的顾虑/要求,需要考虑的其他方法有:

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

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

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