Ubuntu如何排查MongoDB故障
导读:Ubuntu 下 MongoDB 故障排查实操手册 一 快速定位服务状态与日志 查看服务状态与启动命令,确认失败原因或是否未启动: 命令:sudo systemctl status mongod 关注:Active 状态、Main PI...
Ubuntu 下 MongoDB 故障排查实操手册
一 快速定位服务状态与日志
- 查看服务状态与启动命令,确认失败原因或是否未启动:
- 命令:sudo systemctl status mongod
- 关注:Active 状态、Main PID、ExecStart 指向的配置文件(通常为 /etc/mongod.conf)
- 定位并查看日志,优先从日志尾部获取最新错误:
- 命令:sudo tail -n 200 /var/log/mongodb/mongod.log
- 若 systemd 提示启动失败(如 code=exited, status=XXX),日志中通常会有更具体的错误描述(如权限、磁盘、配置等)
- 在 MongoDB Shell 内检查日志组件与运行时日志级别:
- 命令:db.adminCommand({ getLogComponents: 1} )
- 动态提升日志粒度(临时):db.setLogLevel(1)(重启后恢复默认)
- 日志关键要素:
- 级别:F(致命)、E(错误)、W(警告)、I(信息)
- 组件:NETWORK、STORAGE、REPL、COMMAND 等,便于快速定位模块
二 常见故障场景与修复要点
- 服务无法启动且日志出现 “No space left on device”
- 现象:WiredTiger 写检查点或数据文件失败,提示设备上无剩余空间
- 处理:清理磁盘(删除无用文件/旧日志)、扩容磁盘后重启服务
- 启动失败并提示 “Permission denied”(如 WiredTiger.turtle)
- 现象:数据目录或文件属主不正确,mongod 无读写权限
- 处理:chown -R mongodb:mongodb /var/lib/mongodb 后重启
- 启动即退出并伴随 “signal=ILL” 或 “Illegal instruction”
- 现象:CPU 指令不兼容(常见于错误架构包或硬件不支持)
- 处理:核对系统架构与 MongoDB 版本匹配,必要时更换为兼容版本并重启验证
- 本机无法使用 mongo 登录
- 现象:命令未找到或连接被拒绝
- 处理:确认服务已启动(systemctl status mongod)、使用正确连接串(mongo --host localhost --port 27017)、必要时检查防火墙是否放行 27017 端口
三 深入日志分析与性能瓶颈定位
- 错误与告警快速筛选:
- 命令:grep -E ‘E|F’ /var/log/mongodb/mongod.log | tail -n 200
- 按时间段过滤(示例:提取 2025-11-25T10 之后的错误)
- 命令:grep -E ‘E|F’ /var/log/mongodb/mongod.log | awk ‘$1 > “2025-11-25T10”’
- 统计每小时错误量,识别突发告警:
- 命令:cat /var/log/mongodb/mongod.log | grep -oP ‘\d{ 4} -\d{ 2} -\d{ 2} T\d{ 2} ’ | sort | uniq -c
- 发现慢查询或全表扫描:
- 现象:planSummary 为 COLLSCAN、keysExamined 接近 0、docsExamined 很大
- 处理:为过滤字段建立索引(如:db.users.createIndex({ age: 1} )),并通过 --setParameter slowMS=100 调整慢查询阈值以便更早发现
- 副本集异常:
- 现象:REPL 组件出现 “heartbeat failed to …”
- 处理:先做网络连通性测试,再检查副本集状态(rs.status()),必要时分析 Oplog 窗口或执行重新同步
四 配置与运维加固建议
- 合理设置日志级别与路径(/etc/mongod.conf):
- systemLog:
- destination: file
- logAppend: true
- path: /var/log/mongodb/mongod.log
- verbosity: 1
- systemLog:
- 配置 logrotate 做日志轮转,避免磁盘被日志撑满:
- 建议配置示例(/etc/logrotate.d/mongodb):
- /var/log/mongodb/mongod.log {
- daily
- rotate 7
- compress
- missingok
- notifempty
- sharedscripts
- copytruncate
- dateext
- size 200M
- postrotate
- /bin/kill -SIGUSR1 $(cat /var/run/mongod.pid 2> /dev/null || cat /var/log/mongodb/mongod.lock 2> /dev/null) 2> /dev/null || true
- endscript
- }
- /var/log/mongodb/mongod.log {
- 建议配置示例(/etc/logrotate.d/mongodb):
- 在 Shell 内手动触发日志轮转(便于运维窗口期切换日志):
- 命令:db.runCommand({ logRotate: 1} )
- 运行期动态调高日志粒度用于排障,验证后恢复默认,避免性能与磁盘压力
五 高风险操作与兜底方案
- 数据文件损坏或异常时的修复:
- 应急:先备份当前数据目录,再执行 mongod --repair(会重写数据文件,耗时且可能影响可用性)
- 验证:修复后用 db.serverStatus().storageEngine 检查存储引擎状态
- 清空数据目录(仅在确认可丢失数据或已完整备份时执行):
- 命令:sudo rm -rf /var/lib/mongodb/*
- 然后重启服务;此操作不可逆,务必谨慎
- 一般处置顺序建议:先定位错误(日志/组件)→ 处理根因(磁盘/权限/配置/兼容性等)→ 验证(服务状态、连接、关键业务查询)→ 复盘(补齐监控、日志轮转、索引与慢查询基线)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu如何排查MongoDB故障
本文地址: https://pptw.com/jishu/755534.html
