我是Node + Mongo的新手,我正在尝试查看每次进行新提交时是否可以备份数据库。这可能吗?我知道如何使用mongodump进行备份,但我希望每次推送到服务器时都不要这样做。如果数据目录的想法不起作用,是否可以编写一个备份到我的节点服务器存储库的脚本,然后每次运行时都执行推送?
我无法在网上找到任何与git和mongo有关的内容,所以我想我可能会看到这个错误/不明白的东西。任何帮助将不胜感激! 谢谢!
答案 0 :(得分:5)
如果您希望在每次提交时触发某些操作,git
确实有一个允许您调用可执行脚本的"hooks"概念。
例如,您可以根据需要在成功提交之前或之后添加运行pre-commit
备份(包装在shell脚本中)的post-commit
或mongodump
挂钩。
具体来说,我可以在github存储库中包含mongo数据目录吗?
我不会将数据目录包含在您的Git存储库中,因为当MongoDB运行时,数据文件被锁定以进行独占访问。复制正在运行的mongod
实例使用的文件可能会导致损坏或无法使用"备份"。
二进制数据文件也会显着膨胀您的存储库,因为它们(如MongoDB 2.6)是一种未压缩的二进制格式,包括一些预先分配/未使用的存储。如果您确实希望在版本控制中存储完整数据备份,我会backup with mongodump
并在检查版本控制之前用zip或tar + gzip压缩生成的输出目录。
在每次提交时进行完整的数据库备份可能会耗费大量时间和时间。磁盘空间。根据您在每次提交时备份数据库的顾虑/要求,需要考虑的其他方法是:
如果您担心恶意提交删除或更改数据,使用delayed secondary的MongoDB副本集部署将允许您保留较旧的数据视图(例如,延迟两小时) )。这不会取代完整的备份策略,但可以有助于保持开发工作流程更加灵活,同时在错误提交时提供一些数据恢复措施。
如果您更关心数据结构或特定所需数据(而不是完整数据库)的更改,则可以使用迁移框架(例如mongo-migrate
)。使用显式的#34;迁移脚本"对数据结构进行更改可以确保数据和数据的完整性。结构匹配您的代码对给定签出所期望的内容(相关的.migrate脚本将包含在代码提交中)。如果您正在与开发团队合作并希望确保每个人都拥有类似的数据(不检查完整转储),这也是一种有用的方法。
正如@vmr所提到的,您可以使用MMS(MongoDB管理服务)等备份服务进行定期备份。 MMS备份的云版本可以在过去24小时内restore to a point-in-time。
答案 1 :(得分:3)
您需要的只是MMS(Mongo监控服务)。它是MongoDB提供的基于云的连续备份服务(加上许多自动化,如按需恢复,监控)。使用MMS每次进行提交时,DB都会逐步备份。它还可以轻松部署和监视独立,副本集或分片设置。
与mongodump相比,MMS更好,因为它倾向于对整个数据库备份进行增量备份。写入每次提交时执行mongodump的脚本都可以工作但是每次要备份时都必须删除旧的备份文件一个新的提交。 MMS通过整理所有这些板级工作(编写上述脚本)来减少这种开销的开销,这些工作将成为DBA的角色。
点击此链接了解详情:MMS