【问题标题】:Starting mongod with --nojournal option deletes existing journal files?使用 --nojournal 选项启动 mongod 会删除现有的日志文件吗?
【发布时间】:2016-02-05 19:11:42
【问题描述】:

我的 MongoDB 由于尝试追加到日志文件时发生的内存不足错误而崩溃。 在那种情况下,我的 mongod.lock 文件是空的。我重新启动了 mongod,没有任何选项。它正常接受连接。然后我运行了 mongo.exe,但无法连接到 db。它卡在“连接到测试”,但从未成功连接。

我结束了该过程,并使用 --nojournal 选项重新启动了 mongod。但这也无济于事。

但现在我看到 mongod.lock 文件非空。另外,我所有的日记条目都被删除了。

问题是,--noJournal 选项会删除现有的日记帐分录吗?另外,有没有办法恢复日记帐分录?

【问题讨论】:

    标签: mongodb journaling


    【解决方案1】:

    崩溃后恢复

    首先,请阅读这篇文章:

    Recover Data after an Unexpected Shutdown

    崩溃后,您有两种选择:

    • 如果是独立实例,请使用--repair 选项运行mongod
    • 如果实例是副本集的一部分,请擦除所有数据并从备份中恢复或从另一个副本集成员执行初始同步。

    --nojournal 选项

    运行mongod --nojournal不会删除日志文件。事实上,如果存在日志文件,mongod 甚至都不会启动。它会给您以下消息并关闭。

    Error: journal files are present in journal directory, yet starting without journaling enabled.
    It is recommended that you start with journaling enabled so that recovery may occur.
    exception in initAndListen: 13597 can't start without --journal enabled when journal/ files are present, terminating
    

    如果您随后在没有 --nojournal 选项的情况下运行 mongod,它将应用保存在日志文件中的所有更改并删除文件。只有这样你才能用--nojournal重新启动它。

    我相信这就是你的情况。您无需尝试恢复日志文件,因为它们已应用于您的数据。

    【讨论】:

    • Dmytro Shevchenko,您的回答非常有见地。根据您的回答,我只需要运行 mongod --repair 因为已经应用了日志更改。但是有一个小问题。我的数据大小约为 50GB,驱动器中剩余的可用空间约为 20GB。我在网上看到,修复选项至少需要与现有数据大小一样多的内存加上额外的 2 GB。你认为,我应该只运行 mongod --repair。或者我应该在尝试 --repair 选项之前扩展我的硬盘容量。 PS,我的 MongoDB 在 Microsoft 2012 R2 服务器上运行。谢谢!
    • @riteshkasat 好的,在这种情况下,您不应该在有足够的磁盘空间之前运行修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多