赞
踩
参考官方文档:
https://docs.mongodb.com/manual/tutorial/recover-data-following-unexpected-shutdown/
警告:
以下过程适用于独立的mongod实例。
不要使用本教程来恢复副本集的成员。 相反,您应该从备份还原或从该集的其他成员重新同步。
TIP:
如果您在启用日记功能的情况下运行,则几乎不需要运行修复,因为服务器可以使用日志文件自动将数据文件还原到干净状态。 但是,您可能在需要从磁盘级数据损坏中恢复的情况下运行修复。
磁盘级数据损坏或丢失数据文件可能会阻止mongod实例启动,并且日志文件可能不足以自动恢复:
2018-10-24T18:05:18.248-0400 W STORAGE [initandlisten] Detected unclean shutdown - mongod.lock is not empty.
...
2018-10-24T17:24:53.122-0400 E STORAGE [initandlisten] Failed to get the cursor for uri: table:collection-2-6854866147293273505
2018-10-24T17:24:53.122-0400 E STORAGE [initandlisten] This may be due to missing data files. ...
...
***aborting after fassert() failure
在这种场景下,你的dbPath 包含一个空的 mongod.lock文件
以下过程使用mongod --repair从这些情况中恢复:
告警:
如果没有其他选项,则仅使用mongod --repair(以及相关的操作repairDatabase命令和db.repairDatabase()方法)。 操作在修复过程中删除并且不保存任何损坏的数据。
从MongoDB4.0.3 开始,对于WiredTiger,mongod --repair:
过程
重要:
以通常运行mongod进程的同一用户身份运行修复操作,以避免更改MongoDB数据文件的权限。
1.创建数据文件的备份
创建--dbpath 中的 数据文件备份副本
2.使用--repair 启动mongod
要修复数据文件,请使用--repair选项启动mongod实例。
如果mongod实例使用MMAPv1存储引擎,则可以包含--repairpath选项以指定修复期间使用的临时目录。
为您的独立服务器发出类似于以下的命令:
mongod --dbpath /data/db --repair
完成后,dbpath应包含已修复的数据文件和一个空的mongod.lock文件
注意:
对于WiredTiger,如果修复由于任何原因未能完成,则必须使用--repair选项重新启动实例以完成修复。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。