Debian 上 MongoDB 故障排查技巧
一 快速定位流程
sudo systemctl status mongod。若失败,优先看服务的详细日志输出。tail -f /var/log/mongodb/mongod.log 实时观察;必要时用 grep "error\|fail\|exception" /var/log/mongodb/mongod.log 过滤关键信息。net.bindIp、net.port、storage.dbPath、systemLog.path、processManagement.fork、security.authorization 等关键项是否与实际环境一致。mongo --host 127.0.0.1 --port 27017 或 mongosh(新版本),确认本地能连上再排查远程。sudo systemctl restart mongod,再次查看状态与日志确认恢复。二 连接问题专项排查
mongod 已启动并监听 27017;若端口未监听,多半是配置或权限问题导致进程未成功绑定。net 段核对 bindIp,需要远程访问时避免使用仅 127.0.0.1;如使用防火墙(如 iptables/ufw),放行 27017/tcp。示例:sudo ufw allow 27017 或 sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT。security.authorization: enabled,需先以具备权限的用户登录(如 admin)再执行操作;验证用户权限与角色是否正确。三 性能与稳定性问题排查
mongostat 观察 insert/query/update/delete 速率、连接数、页面错误等;用 mongotop 查看集合级别的读写耗时。explain("executionStats") 分析执行计划,补充或调整索引,尽量使用覆盖索引,避免全表扫描与无限制返回。storage.wiredTiger.engineConfig.cacheSizeGB,在内存与业务间取得平衡。四 常见错误与修复清单
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 服务无法启动 | systemctl status mongod、/var/log/mongodb/mongod.log |
核对 /etc/mongod.conf 路径与语法;确保 dbPath/logPath 存在且属主为 mongodb:mongodb;必要时 chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb |
| Connection refused | 本机 mongo 能否连、`netstat -tlnp |
grep 27017、bindIp` |
| Write concern failed | 副本集状态 rs.status() |
检查 副本集成员健康、网络连通与写入关注级别是否过高 |
| No Server Chosen by ReadPreference | 读偏好配置、拓扑连通性 | 调整 ReadPreference 与 Read Concern;确认副本集/分片节点可达 |
| 权限被拒绝 | 是否启用 authorization、用户是否存在 |
以管理员登录创建/授权用户,或临时关闭授权验证进行排障(完成后务必恢复) |
| “mongo 命令未找到” | which mongo、环境变量 |
安装对应客户端工具或修正 PATH;新环境建议使用 mongosh |
五 排障小技巧与后续优化
db.getLogComponents() 查看日志组件,或用 db.adminCommand({ getLog: "componentName" }) 拉取指定组件日志,提升定位效率。systemctl restart mongod 并持续观察日志。mongostat/mongotop 与 Profiling 持续巡检。