CentOS 下 MongoDB 故障排查手册
一 快速定位流程
sudo systemctl status mongodsudo systemctl start|restart mongodss -lntp | grep 27017 或 nc -vz 127.0.0.1 27017sudo tail -f /var/log/mongodb/mongod.logsudo mongod --config /etc/mongod.conf 观察控制台输出/etc/mongod.confnet.bindIp、net.port、storage.dbPath、systemLog.pathmongosh --host 127.0.0.1 --port 27017mongosh --host <服务器IP> --port 27017 -u <用户> -p <密码> --authenticationDatabase <库名>sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reloadtop、free -m、df -hldd $(which mongod) 检查缺失库二 常见故障与修复
systemctl status 提示端口冲突ss -lntp | grep 27017 找到 PID,sudo kill -9 <PID> 后 sudo systemctl start mongodsudo rm -f /tmp/mongodb-27017.sock,必要时 sudo systemctl restart mongodsystemctl status 报 code=exited, status=14 或无法写入日志/数据sudo chown -R mongodb:mongodb /var/lib/mongo /var/log/mongodb /tmpsudo chmod 0755 /var/lib/mongo /var/log/mongodb /tmpstorage: 下的子项需缩进两个空格),核对选项名与版本匹配mongod: error while loading shared libraries: libcrypto.so.10: cannot open shared object filenet.bindIp: 0.0.0.0(或加入服务器内网/公网 IP)三 日志与性能分析
sudo tail -f /var/log/mongodb/mongod.logdb.getLogComponents()、db.adminCommand({ getLog: 1 })mtools(mlogfilter、mloginfo、mplotqueries)做时间筛选、慢查询与可视化分析mongostat、mongotopdb.serverStatus()(关注 connections、mem、locks、opcounters 等)mongod.conf 开启慢查询日志(如 slowOpThresholdMs: 100),用 mlogfilter 按时间窗与阈值筛选,结合 mplotqueries 做热点分析四 配置与运维要点
net.bindIp:需要远程访问时改为 0.0.0.0 或指定网段security.authorization:启用后务必先创建管理员/业务用户再远程连接storage.dbPath 与 systemLog.path:确保目录存在且属主为 mongodbmongod.log,避免单文件过大,便于归档与审计sudo systemctl enable mongodsudo systemctl is-enabled mongod 与 sudo systemctl status mongod五 一键排查命令清单
sudo systemctl status mongodss -lntp | grep 27017sudo tail -n50 -f /var/log/mongodb/mongod.logsudo mongod --config /etc/mongod.confmongosh --host 127.0.0.1 --port 27017mongosh --host <IP> --port 27017 -u <user> -p <pwd> --authenticationDatabase <db>ls -ld /var/lib/mongo /var/log/mongodb /tmpsudo chown -R mongodb:mongodb /var/lib/mongo /var/log/mongodb /tmpldd $(which mongod)sudo firewall-cmd --list-portssudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload