假设:单个MongoDB实例。
我使用仅存储我的数据(dbpath)的卷的EBS快照测试了备份和还原,而不是/ logs或/ journal卷。恢复似乎工作正常,数据可用。
这样做有风险或缺点吗?换句话说,如果我没有/ logs和/ journal卷的备份快照,我会丢失任何东西吗?
答案 0 :(得分:4)
如果您的/journal
目录位于与dbpath
不同的EBS卷上,则获得一致备份的唯一方法是使用db.fsyncLock()
以确保没有待处理的写入操作。 fsyncLock()
命令具有阻止对数据库的所有写入的副作用,因此,如果要从副本集中的辅助节点备份(而不是单独的{{1}),通常只需要使用此方法。 },根据您在问题描述中的假设)。
如果mongod
和journal
位于同一个EBS卷上,则可以获得consistent backup using EBS snapshots。
严格来说,您不需要备份日志。出于疑难解答的目的,它对rotate the logs很有用,并保留几天的最新日志文件。
我使用仅存储我的数据(dbpath)的卷的EBS快照测试了备份和还原,而不是/ logs或/ journal卷。恢复似乎工作正常,数据可用。
这种方法很好,直到它不是 - 那个你想要从备份恢复并且意识到你的最后 n 备份无法使用的重要日子假设恢复数据库的时间,或者在遇到意外错误的几天之后就可以了。如果不备份日志文件,这实际上与没有日志记录时运行相同,recommended recovery procedures涉及在重新启动之前运行修复。风险并不是关于未从期刊中刷新的变化,而是如果在写入数据文件的过程中电源中断而使事情处于不一致的状态而没有恢复信息的情况下,这是不幸的时机(又名:期刊)。
如果您要进行备份,请务必遵循正确的程序以消除不必要的风险。
有关详细信息,请参阅MongoDB手册中的EC2 Backup and Restore。