意外关闭后恢复独立服务器

当独立的mongod实例禁用日记功能[1]时,不正常的关闭可能会使数据处于不一致状态。异常关闭后,如果存在非空的mongod.lock文件,则mongod实例在重新启动时记录以下消息:

Detected unclean shutdown - mongod.lock is not empty.

如果dbPath包含非空的mongod.lock文件,则必须修复数据库。本教程概述了修复独立mongod数据库的过程。

Warning

不要使用本教程恢复replica set的成员。相反,您应该从backup恢复,或者从集合的另一个成员重新同步,如重新同步副本集的成员中所述。

[1] 默认情况下,MongoDB 在启用journaling的情况下运行,以防止在关闭时出现数据不一致的情况。要彻底关闭,请参阅停止 mongod 进程

Procedure

Important

以通常运行mongod进程的同一用户身份运行修复操作,以避免更改 MongoDB 数据文件的权限。

创建数据文件的备份。

--dbpath中创建数据文件的备份副本。

以--repair 启动 mongod。

要修复数据文件,请使用--repair选项启动mongod实例。默认情况下,在修复操作期间,MongoDB 使用--dbpath中的_tmp目录。

如果mongod实例使用MMAPv1 存储引擎,则可以包括--repairpath选项以指定备用临时目录。有关详细信息,请参见--repairpath

发出类似于以下内容的命令:

mongod --dbpath /data/db --repair

完成后,dbpath应包含已修复的数据文件和一个空的mongod.lock文件。 [2]

[2] *(12)*通常,您不应该手动删除mongod.lock文件。而是,使用上述过程恢复数据库。在严重的情况下,您可以删除文件,使用可能损坏的文件启动数据库,然后尝试从数据库中恢复数据。但是,在这些情况下无法预测数据库的状态。
首页