如何在独立MongoDB上的非清除关闭后非活动存储引擎故障后恢复

时间:2017-09-30 16:18:52

标签: mongodb

有一些与之相关的SO问题。但没有一个像这个解决方案那么简单:

我在Mac OSX上运行一个独立的mongodb单一实例用于开发目的。

Mac崩溃......

重新启动mongo时,我可以看到Mongo尝试恢复(检测到mongod.lock文件)并重新启动。

(过去,我只是吹掉我所有的本地开发数据库文件夹并重新开始。有点糟糕。但这次我决定深入挖掘一下。)

控制台输出中需要注意的关键是它找到了由'mmapv1'存储引擎创建的“文件,因此将活动存储引擎设置为'mmapv1'。”基本上覆盖了配置设置为wiredTiger。

: - 0

我的控制台(为简洁起见编辑):

db version v3.2.10
git version: 79d9b3ab5ce20f51c272b4411202710a082d0317
OpenSSL version: OpenSSL 1.0.2l  25 May 2017
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64
options: { ...storage: { dbPath: "/Users/jon/databases/mongodb", directoryPerDB: true, journal: { enabled: true }, wiredTiger: { engineConfig: { cacheSizeGB: 4 } } }, ... }
Detected data files in /Users/jon/databases/mongodb created by the 'mmapv1' storage engine, so setting the active storage engine to 'mmapv1'.
Detected unclean shutdown - /Users/jon/databases/mongodb/mongod.lock is not empty.
journal dir=/Users/jon/databases/mongodb/journal
recover begin
info no lsn file in journal/ directory
recover lsn: 0
recover /Users/jon/databases/mongodb/journal/j._0
recover cleaning up
removeJournalFiles
recover done
Durability thread started
Journal writer thread started

但是我收到了这个警告:

Detected configuration for non-active storage engine wiredTiger when current storage engine is mmapv1

结局很糟糕:

***aborting after invariant() failure
...
-----  END BACKTRACE  -----
Abort trap: 6

1 个答案:

答案 0 :(得分:0)

解决方案

不可否认,这是一个发现自己的棘手情况。

我备份了我的整个本地文件夹,所以我可以尝试其他方法......

我查看了存储数据库文件的目录以及真正不需要的清除旧文件夹。但这可能不是事情有效的原因。

我还进行了修复(可能需要根据您的具体情况删除日志文件):

mongod --dbpath /Users/jon/databases/mongodb --repair

重新启动mongo后,一切恢复正常。