为什么以及什么情况下发出mongodb修复命令

时间:2013-11-05 16:31:43

标签: mongodb

我在64位机器上使用Mongodb 2.4.8,其中3台服务器作为replicaSet,我目前已经在我的开发盒上废弃了日记。

Durabilty对我们的应用程序来说并不那么重要,因此我禁用了日记选项。

我发现日记功能只有一个优点,就是在不干净关机的情况下我们不必发出修复命令,因为日记会照顾它。

为了产生这种不干净的关闭我使用kill -9 Mongo进程ID杀死了mongo副本进程,我刚刚删除了mongo锁并重新启动了mongo主要,辅助和仲裁服务器,一切都很顺利。

我的问题是,当我应该实际发出修复命令时(因为删除锁定并重新启动)

请原谅这个问题是否过于愚蠢,因为我想知道在生产过程中解释日记的风险。

1 个答案:

答案 0 :(得分:2)

repairDatabase命令检查整个数据库是否有损坏的数据并丢弃该数据,以便其余数据再次可用。

在不明确的关机后,这可能是必要的。在你的情况下,关闭似乎没有破坏任何数据(或者它可能会,但它还没有变得明显,因为尚未访问有问题的数据)。但这并不意味着情况总是如此。那个时候你的数据库真的做了什么吗?当数据库空闲或仅执行读操作时,通常不用担心。但是当它当前处于大型写操作的中间时,没有日志记录的突然关闭会更加麻烦。

数据库可能损坏且repairDatabase可能有所帮助的另一种情况是存储介质的物理故障或底层文件系统的损坏。

有关副本集的重要说明:如果您拥有副本集,并且只有一个节点已损坏,那么您应该删除该节点并从副本的其他成员重建它 - 组。 RepairDatabase将销毁任何损坏的数据。从副本集恢复不会。