Linux环境下MongoDB故障排查指南
日志是故障排查的核心线索,Linux下MongoDB的日志主要分布在两个位置:
journalctl -u mongod.service查看与MongoDB相关的系统级错误(如服务启动失败、权限问题);/var/log/mongodb/mongod.log(可通过cat /etc/mongod.conf | grep logpath确认),使用tail -f /var/log/mongodb/mongod.log实时追踪最新日志,重点关注“ERROR”“FAILED”等关键词。使用systemctl status mongod.service命令检查服务状态:
sudo systemctl start mongod.service;MongoDB的主配置文件通常为/etc/mongod.conf,需重点检查以下关键配置项:
net.port(默认27017),确保未被其他进程占用;storage.dbPath(如/var/lib/mongodb),需存在且具备正确权限;systemLog.path,确保目录可写;net.bindIp(如0.0.0.0允许远程连接,127.0.0.1仅本地连接);security.authorization(若启用,需提前创建用户)。mongod --config /etc/mongod.conf --fork测试配置文件语法是否正确。MongoDB对数据目录和日志文件的权限要求严格,常见错误包括“Permission denied”“Cannot open file”:
mongod用户(或运行服务的用户),执行sudo chown -R mongod:mongod /var/lib/mongodb(路径以配置文件为准);sudo chown -R mongod:mongod /var/log/mongodb;permissive模式测试(setenforce 0),或通过audit2allow生成自定义规则。若出现连接问题,需检查端口和网络配置:
ss -tuln | grep 27017查看27017端口是否被MongoDB占用,若有其他进程占用,通过kill -9 <PID>终止;firewall-cmd --permanent --add-port=27017/tcp,Ubuntu用ufw allow 27017),并重载防火墙;ping <MongoDB服务器IP>测试网络连通性,telnet <IP> 27017测试端口是否可达。df -h检查数据目录所在磁盘的剩余空间,若使用率超过80%,需清理旧数据(如归档日志、备份文件);/etc/security/limits.conf,添加mongod soft nofile 65535和mongod hard nofile 65535;/lib/systemd/system/mongod.service,在[Service]段添加LimitNOFILE=65535,然后执行systemctl daemon-reload。使用MongoDB自带工具实时监控性能:
mongostat --host <IP> --port 27017;mongotop --host <IP> --port 27017;db.serverStatus();mtools工具包(pip3 install mtools)分析慢查询,如mlogfilter mongod.log --slow 1000 | mplotqueries --type scatter。若日志中出现“WiredTiger error”(如数据文件损坏、磁盘空间不足),需进行存储引擎修复:
mongod --repair --dbpath /var/lib/mongodb(路径以配置文件为准);mongodump),监控磁盘空间。rs.status()),确保多数节点在线,修复网络分区;configsvr)状态,确保分片平衡(sh.status())。yum update mongod或apt upgrade mongodb)。