遭遇MongoServerSelectionError连接失败,重启mongod后数据丢失求助
看起来你遇到的是WiredTiger存储引擎恢复异常导致的“假丢失”问题——数据其实还在磁盘上,只是MongoDB启动时没有正确加载它们。结合你提供的日志,关键线索是这两行:
2020-06-29T15:40:37.918+0100 I STORAGE [initandlisten] WiredTiger message [1593441637:918201][14532:140731272224336], txn-recover: Set global recovery timestamp: 0
2020-06-29T15:40:37.939+0100 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
这说明WiredTiger在恢复时回滚到了初始时间戳(相当于空数据库状态),但你的数据文件(.wt格式)还在C:\data\db\目录里,所以文件夹大小还是3GB。下面是一步步的修复方案:
第一步:紧急备份数据目录
先别做任何操作,先备份! 把整个C:\data\db\目录复制到另一个安全的位置(比如D盘的MongoBackup文件夹)。这是防止后续操作失误导致真·数据丢失的关键。
第二步:彻底停止MongoDB进程
打开Windows任务管理器,找到所有名为mongod.exe的进程,右键选择“结束任务”,确保MongoDB完全停止运行。
第三步:跳过日志恢复启动MongoDB
打开命令提示符(CMD),导航到MongoDB的bin目录(比如C:\Program Files\MongoDB\Server\4.0\bin),运行以下命令:
mongod --dbpath C:\data\db\ --nojournal
这个命令会让MongoDB跳过损坏的journal日志,直接加载磁盘上的原始数据文件。启动完成后,用MongoDB Shell或者你的Node.js代码连接数据库,看看集合是否恢复了。
第四步:如果跳过日志无效,尝试修复数据库
如果上面的方法没效果,先关闭mongod,再运行修复命令:
mongod --dbpath C:\data\db\ --repair
⚠️ 注意:--repair会重建数据的索引和结构,可能会丢失部分未提交的临时数据,但能修复大部分文件损坏问题。修复完成后,正常启动MongoDB:
mongod --dbpath C:\data\db\
第五步:验证数据并预防未来问题
启动成功后,检查你的集合和数据是否恢复。如果一切正常,记得:
- 以后关闭MongoDB时,用
db.shutdownServer()命令(在MongoDB Shell中),不要直接杀进程或断电; - 可以考虑开启MongoDB的访问控制(添加用户名密码),避免未授权操作;
- 定期备份数据目录,或者使用MongoDB的备份工具(比如
mongodump)。
内容的提问来源于stack exchange,提问作者kai

