Docs 菜单

Docs 主页开发应用程序MongoDB Manual

在意外关闭后恢复独立实例

警告

以下步骤适用于独立 mongod 实例版本 7.0。有关其他 MongoDB 版本,请参阅相应版本的手册。

请勿使用本教程恢复副本集的节点。相反,您应该从备份中恢复,或者从该集的另一个节点重新同步,具体操作请参阅重新同步副本集节点

提示

如果您在启用日志记录功能的情况下运行,则几乎无需运行修复,因为服务器可以使用日志文件将数据文件自动恢复到干净状态。但是,如果需要从磁盘级数据损坏中恢复,则可能需要运行修复。

磁盘级数据损坏或丢失数据文件会阻止 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 storage engine, mongod --repair

  • 为存在一个或多个不一致索引的集合重建所有索引。

  • 丢弃损坏的数据。

  • 为缺失的数据/元数据文件创建空/存根文件。

重要

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

1

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

2

要修复数据文件,请使用 --repair 选项来启动 mongod 实例。

为您的独立实例发出如下所示的命令:

mongod --dbpath /data/db --repair

完成后,dbpath 应包含已修复的数据文件以及空的 mongod.lock 文件。[1]

注意

如果修复因故未能完成,则必须使用 --repair 选项重新启动实例才能完成修复。

[1] 通常,您不应手动删除 mongod.lock 文件。相反,请使用上述过程恢复数据库。危急情况下,您可以删除此文件,使用可能损坏的文件启动数据库,并尝试从数据库中恢复数据。但是,在这些情况下将无法预计数据库的状态。
← 恢复分片集群