You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu运行1年的MongoDB突发code 100崩溃,如何无数据损失恢复?

MongoDB报错退出码100问题排查与解决

问题背景

一台运行MongoDB的Ubuntu服务器稳定运行1年以上,无操作情况下突然崩溃,启动报错退出码100,执行mongod的启动日志如下:

ubuntu@ip-172-26-6-171:~/project$ mongod
2021-10-21T17:14:23.214+0000 I CONTROL  [initandlisten] MongoDB starting : pid=868751 port=27017 dbpath=/data/db 64-bit host=ip-172-26-6-171
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] db version v3.6.8
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] git version: 8e540c0b6db93ce994cc548f000900bdc740f80a
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] modules: none
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] build environment:
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten]     distarch: x86_64
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2021-10-21T17:14:23.215+0000 I CONTROL  [initandlisten] options: {}
2021-10-21T17:14:23.220+0000 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
2021-10-21T17:14:23.220+0000 I CONTROL  [initandlisten] now exiting
2021-10-21T17:14:23.220+0000 I CONTROL  [initandlisten] shutting down with code:100

存在三个待解答疑问:

  • 未修改配置、未执行相关操作的情况下,为什么会突然出现该错误?
  • 数据库数据是否已经丢失?
  • 如何在不损失数据的前提下恢复MongoDB服务?

问题根因说明

从日志报错NonExistentPath: Data directory /data/db not found可以明确,退出码100是MongoDB找不到默认数据存储目录/data/db触发的标准错误。无操作情况下突发该问题的常见原因有三类:

  • 数据盘挂载失效:如果/data目录挂载在独立的数据盘/云盘上,服务器异常重启、云平台底层故障都可能导致挂载丢失,/data回到系统盘初始的空目录状态,自然找不到/data/db
  • 系统自动更新异常:Ubuntu的unattended-upgrades自动更新部分系统组件后,小概率会触发目录归属变更或目录被删除的异常
  • 无感知的误操作:其他运维进程、其他管理员误删除目录,操作人没有同步信息,导致你误以为没有做过任何操作

数据安全性判断

数据大概率没有丢失:
该报错只是MongoDB找不到数据目录的位置,不是数据本身损坏。只要能找到原有的MongoDB数据文件(一般是后缀为.wt、名称带WiredTiger前缀的文件集合),就可以完整恢复全部数据。
如果之前用了独立数据盘,可以先执行fdisk -l查看数据盘是否还在设备列表,执行mount命令确认挂载状态,绝大多数情况数据都还存在于数据盘内,只是没有正常挂载到/data路径。

无损失恢复方案

你自己测试的「手动创建/data/db目录,移动原有数据库文件到该路径」的方案完全可行,标准的完整操作流程如下:

  1. 先将所有找到的原有MongoDB数据文件备份到独立目录,避免操作失误导致数据丢失
  2. 用如下命令查找原有MongoDB数据文件的存放路径:
sudo find / -name "WiredTiger" 2>/dev/null
  1. 创建/data/db目录并配置正确的权限:
sudo mkdir -p /data/db
sudo chown -R mongodb:mongodb /data/db
  1. 将原有数据文件全部移动到/data/db目录下,保持文件原有权限不变
  2. 启动MongoDB验证即可,如果你用systemd管理MongoDB服务,可以执行sudo systemctl start mongod启动

后续优化建议

  • 如果使用独立数据盘存储MongoDB数据,将挂载规则写入/etc/fstab,确保开机自动挂载,避免再次出现挂载失效问题
  • 定期全量备份MongoDB数据到独立存储,避免极端场景下的数据丢失

内容的提问来源于stack exchange,提问作者aquatic7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:36:03