MongoDB在Linux上的故障排查清单
一 快速定位流程
- 检查服务状态与启动失败原因:使用命令查看服务是否存活、最近日志与单元文件输出,定位“起不来”的直接报错。
- 命令示例:
- 查看状态:sudo systemctl status mongod
- 实时看系统日志:sudo journalctl -ex | grep mongod
- 查看MongoDB日志:sudo tail -n 50 /var/log/mongodb/mongod.log
- 核对关键配置与目录权限:重点检查网络绑定、端口、数据目录与日志路径是否存在且权限正确,避免因配置或权限导致无法启动或无法连接。
- 配置文件:/etc/mongod.conf
- 关键项:bindIp、port、dbPath、logPath、security.authorization
- 权限示例:ls -ld /var/lib/mongodb /var/log/mongodb(确保属主/属组为 mongod/mongodb,权限合理)
- 直连本机验证:排除网络因素,先确认本机可连。
- 命令示例:mongo --host 127.0.0.1 --port 27017
- 检查网络与防火墙:确认监听地址与端口对外开放,防火墙放行。
- 命令示例(UFW):sudo ufw status、sudo ufw allow 27017
- 命令示例(firewalld):sudo firewall-cmd --list-ports、sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
- 资源与依赖检查:确认磁盘空间、内存、CPU、I/O是否正常,必要时安装缺失依赖库(如 openssl-devel)。
二 常见故障与修复要点
- 服务无法启动
- 典型原因:配置项错误(如 bindIp 仅 127.0.0.1 导致远程连不上)、dbPath/logPath 不存在或权限错误、端口被占用、数据文件损坏。
- 处理要点:核对 /etc/mongod.conf 与目录权限;用 journalctl 与 mongod.log 定位首条报错;必要时以 mongod --dbpath /path --logpath /path --fork 前台启动观察详细输出;若数据文件异常,可在备份后尝试 –repair 修复(谨慎操作)。
- 本机能连但远程连不上
- 典型原因:bindIp 未包含服务器IP或仍为 127.0.0.1;云安全组/本机防火墙未放行 27017;监听端口非默认或被占用。
- 处理要点:将 bindIp 调整为 0.0.0.0(或指定内网IP),重启服务;在云平台与系统防火墙放行 27017/tcp;确认 netstat -tulpen | grep 27017 监听正确。
- 认证与权限失败
- 典型原因:未启用或未正确配置 security.authorization;连接串未带认证库;用户权限不足。
- 处理要点:在 mongod.conf 中启用授权并重启;连接时使用 –authenticationDatabase admin;按需创建/授权用户。
- 性能异常与慢查询
- 典型现象:CPU/内存/磁盘IO飙升、请求延迟增大、连接数异常。
- 处理要点:用 mongostat/mongotop 观察吞吐与热点库表;在 mongod.log 中筛选慢查询(如 mlogfilter … --slow 100);必要时调整索引与查询、限流或扩容。
三 日志与监控定位
- 日志查看与分析
- 常用路径:/var/log/mongodb/mongod.log;实时跟踪:tail -f /var/log/mongodb/mongod.log
- 工具链:使用 mtools(如 mlogfilter、mplotqueries、mloginfo)筛选慢查询、绘制查询时间分布;在 Shell 中查看组件日志与获取全量日志:db.getLogComponents()、db.adminCommand({ getLog: 1 })
- 日志轮转:通过 logrotate 管理日志大小与保留期,示例配置(/etc/logrotate.d/mongodb):
- /var/log/mongodb/mongod.log {
- daily; rotate 7; compress; missingok; notifempty; sharedscripts; copytruncate;
- size 200M;
- postrotate
- /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock)
- endscript
- }
- 运行状态监控
- 命令行:
- mongostat:查看 insert/update/query/delete 速率、连接数、脏页、断言等
- mongotop:按库/集合统计读写耗时
- db.serverStatus():获取全局指标(内存、连接、操作计数、网络、WiredTiger 引擎状态等)
- 系统与可视化:结合 top/htop/iostat 观察资源;使用 MongoDB Compass 做可视化诊断;生产建议接入 Prometheus + Grafana 做长期监控与告警。
四 高频命令速查表
| 目标 |
命令示例 |
| 服务状态 |
sudo systemctl status mongod |
| 启动/重启/开机自启 |
sudo systemctl start |
| 系统日志定位 |
sudo journalctl -ex |
| MongoDB日志 |
sudo tail -n 50 /var/log/mongodb/mongod.log;tail -f … |
| 本机直连测试 |
mongo --host 127.0.0.1 --port 27017 |
| 远程连通性 |
mongo --host --port 27017(失败先检查防火墙/安全组) |
| 监听端口检查 |
sudo netstat -tulpen |
| 资源监控 |
top/htop;iostat -x 1 |
| MongoDB监控 |
mongostat;mongotop;db.serverStatus() |
| 慢查询筛选 |
mlogfilter replsvr.log --from “2025-01-01T00:00:00” --to “+1d” --slow 100 |
以上命令覆盖服务、网络、日志、监控四个维度,适合作为现场排障的“第一响应”清单。