磁盘级数据损坏或数据文件丢失可能会阻止 mongod
实例启动,并且日志文件可能不足以自动恢复:
2018-10-24T18:05:18.248-04:00 W STORAGE [initandlisten] Detected unclean shutdown - mongod.lock is not empty. ... 2018-10-24T17:24:53.122-04:00 E STORAGE [initandlisten] Failed to get the cursor for uri: table:collection-2-6854866147293273505 2018-10-24T17:24:53.122-04:00 E STORAGE [initandlisten] This may be due to missing data files. ... ... ***aborting after fassert() failure
在这种情况下,您的dbPath
目录包含一个非空 mongod.lock
文件。
仅在别无选择时使用mongod --repair
。此操作将删除修复过程中的任何损坏数据,但不会保存这些数据。
mongod --repair对于 WiredTiger 存储引擎:
-
为具有一个或多个不一致索引的集合重建所有索引。
-
丢弃损坏的数据。
-
为丢失的数据/元数据文件创建空/存根文件。
创建数据文件的备份。
创建数据文件的备份副本--dbpath
。
Start mongod
with --repair
.
要修复数据文件,请使用该mongod
--repair
选项启动实例。
为您的独立设备发出类似以下命令:
mongod --dbpath /data/db --repair
完成后,dbpath应该包含修复的数据文件和一个空的mongod.lock文件。
如果修复因任何原因未能完成,您必须重新启动实例并选择--repair
完成修复。
[ 1 ] | 通常,您不应手动删除该mongod.lock 文件。相反,请使用上述过程恢复数据库。在紧急情况下,您可以删除该文件,使用可能已损坏的文件启动数据库,然后尝试从数据库中恢复数据。但是,在这些情况下无法预测数据库的状态。 |
标签:关机,mongod,mongo,repair,--,lock,文件,意外,数据文件 From: https://www.cnblogs.com/wonchaofan/p/18291559