Linux系统中MongoDB故障排查方法
导读:Linux 下 MongoDB 故障排查方法 一 快速定位流程 检查服务状态与自启:使用命令查看 systemctl status mongod,若未运行则执行 sudo systemctl start mongod;需要开机自启执行 s...
Linux 下 MongoDB 故障排查方法
一 快速定位流程
- 检查服务状态与自启:使用命令查看 systemctl status mongod,若未运行则执行 sudo systemctl start mongod;需要开机自启执行 sudo systemctl enable mongod。若提示 Unit not found,说明未安装或 systemd 单元缺失,需安装或手动创建服务单元。
- 查看错误日志:MongoDB 默认日志位于 /var/log/mongodb/mongod.log,使用 tail -f /var/log/mongodb/mongod.log 实时观察启动失败、权限、配置等关键信息。
- 校验配置文件:默认配置文件 /etc/mongod.conf,重点核对 net.port: 27017、net.bindIp(仅本地为 127.0.0.1,远程需改为 0.0.0.0 并配合安全策略)、storage.dbPath。
- 网络连通性:本地用 telnet 127.0.0.1 27017 或 nc -zv 127.0.0.1 27017 测试端口;远程先 ping 再测端口。
- 防火墙与安全组:放行 27017/TCP(如 ufw allow 27017 或云厂商安全组入站规则)。
- 连接测试:本地 mongo --host 127.0.0.1 --port 27017;远程使用 mongodb://user:pass@host:27017/db?authSource=admin,密码含特殊字符需 URL 编码(如 @ → %40)。
二 常见故障与修复对照表
| 现象 | 可能原因 | 快速修复 |
|---|---|---|
| 服务启动失败或状态 inactive/failed | 配置错误、权限不足、端口冲突、磁盘满 | 查看 /var/log/mongodb/mongod.log;核对 /etc/mongod.conf;用 **netstat -tulpen |
| 启动超时 mongod.service start operation timed out | 同上,外加资源/系统限制 | 优先查日志定位根因,再按“配置/权限/端口/磁盘/资源”逐项修复 |
| Unit not found | 未安装或 systemd 单元缺失 | 通过包管理器安装(如 mongodb-org),或手动创建 /etc/systemd/system/mongod.service 并 daemon-reload 后启动 |
| 远程连接被拒绝 ECONNREFUSED | bindIp 仅 127.0.0.1、防火墙/安全组未放行、服务未监听外网 | 将 bindIp: 0.0.0.0(生产谨慎),放行 27017,确认服务监听 0.0.0.0:27017 |
| 认证失败 Authentication failed | 密码错误、authSource 不对、账户未创建 | 连接串加 ?authSource=admin;确认用户与库;对密码特殊字符 URL 编码 |
| 启动报 lock 或 WiredTiger 异常 | 异常关机导致锁文件残留 | 确认无 mongod 进程后删除 data 目录/mongod.lock 与 *WiredTiger 锁文件,再启动;必要时以 –repair 修复(会重建 WT 元数据,谨慎操作) |
三 性能与异常抖动排查
- 系统层面:用 uptime 看 1/5/15 分钟负载;top/iostat 识别 iowait 高、util 持续 100% 的磁盘瓶颈;free -m/swap 观察内存与 OOM;ifstat/sar -n DEV 看网卡流量是否突增(如全量同步、mongodump)。
- MongoDB 层面:用 mongostat 观察 insert/update/delete/query、faults(缺页/内存压力)、connections 突增;用 mongotop 定位读写耗时高的库/集合;开启慢查询日志(如 slowms),用 mtools(mlogfilter/mplotqueries/mloginfo) 分析慢操作与错误趋势;必要时在 shell 执行 db.serverStatus()、db.getLogComponents() 获取更细信息。
四 安全与网络加固要点
- 最小暴露面:生产环境避免 bindIp: 0.0.0.0,仅在内网接口监听;云上通过 VPC/安全组 限制来源 IP/CIDR。
- 认证与授权:启用 SCRAM 认证,创建最小权限用户;连接串使用 authSource=admin 明确鉴权库;密码特殊字符务必 URL 编码。
- 传输安全:优先 TLS/SSL 加密传输;限制对外暴露端口,仅放通必要来源。
- 防火墙:严格放行 27017/TCP,避免使用默认全放开策略;变更后及时验证连通性。
五 常用命令清单
- 服务与自启:sudo systemctl status mongod、sudo systemctl start mongod、sudo systemctl enable mongod。
- 日志与配置:tail -f /var/log/mongodb/mongod.log、cat /etc/mongod.conf。
- 端口与进程:sudo netstat -tulpen | grep 27017、ps -ef | grep mongod、必要时 kill -2/-3 优雅终止。
- 权限修复:sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb。
- 连通性:ping 、telnet 27017 或 nc -zv 27017。
- 防火墙:sudo ufw allow 27017(或云安全组入站规则放行 27017/TCP)。
- 连接测试:本地 mongo --host 127.0.0.1 --port 27017;远程 mongodb://user:pass%40abc@host:27017/db?authSource=admin。
- 性能观测:mongostat、mongotop、db.serverStatus()。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux系统中MongoDB故障排查方法
本文地址: https://pptw.com/jishu/782187.html
