1. 检查MongoDB服务状态
使用systemctl status mongod命令确认MongoDB服务是否正在运行。若未运行,通过sudo systemctl start mongod启动服务,并设置开机自启(sudo systemctl enable mongod)。服务未启动是许多故障的根源,需优先排查。
2. 查看与分析日志文件
MongoDB的日志文件是故障排查的核心线索,通常位于/var/log/mongodb/mongod.log。使用tail -f /var/log/mongodb/mongod.log实时追踪最新日志,重点关注ERROR(错误)、WARN(警告)级别的条目。例如,“连接超时”可能表现为“Connection timed out”,“权限错误”会提示“not authorized”,“数据库损坏”可能出现“checksum doesn’t match”等关键词。此外,可通过db.getLogComponents()(shell内)或mloginfo(第三方工具)进一步分析日志结构和统计信息。
3. 验证配置文件正确性
MongoDB的配置文件默认路径为/etc/mongod.conf,需检查以下关键配置项的正确性:
/data/db);0.0.0.0表示允许所有IP,生产环境建议限制为特定IP);mongod --config /etc/mongod.conf --fork命令测试配置文件语法是否正确。4. 排查端口与网络问题
使用netstat -anp | grep 27017(或ss -lntp | grep 27017)检查MongoDB端口是否被正常监听。若端口被占用,通过lsof -iTCP -sTCP:LISTEN -n -P | grep <端口号>找到占用进程并终止(kill -9 <PID>)。同时,检查防火墙设置(如iptables或firewalld),确保允许MongoDB端口的流量通过(如firewall-cmd --add-port=27017/tcp --permanent)。
5. 检查系统资源使用情况
使用top、htop或free -h命令查看系统资源使用情况:
df -h检查数据目录所在磁盘的剩余空间,若空间不足(如小于10%),MongoDB可能无法写入数据;mongostat监控查询性能。6. 处理权限问题
MongoDB进程需要对数据目录、日志文件及配置文件有正确的读写权限。通常,将这些文件的所有者设置为运行MongoDB的用户(如mongod),命令如下:
sudo chown -R mongod:mongod /var/log/mongodb/(日志目录)
sudo chown -R mongod:mongod /data/db/(数据目录)
sudo chown mongod:mongod /etc/mongod.conf(配置文件)。
若使用SELinux(如CentOS),需检查其状态(sestatus),若处于enforcing模式,可临时设置为permissive模式排查是否为SELinux导致的问题(sudo setenforce 0),或通过chcon命令修改安全上下文(如sudo chcon -Rv --type=mongod_var_lib_t /data/db)。
7. 使用诊断工具监控性能
MongoDB自带多种诊断工具,可实时监控实例状态:
mongostat);mongotop);mongo进入shell后执行db.serverStatus()。8. 解决常见具体问题
_id)是否有重复数据,可通过db.collection.find({<字段>: {$exists: true}}).count()统计,必要时删除重复数据;mongod.conf中调整wiredTiger.engineConfig.cacheSizeGB(如设置为物理内存的50%),优化查询(添加索引);wiredTiger的journal是否开启(默认开启),确认副本集状态(rs.status()),调整写入确认级别(如w: 1);rs.syncFrom()动态调整同步源,监控oplog大小(db.oplog.rs.stats().maxSize),必要时扩大oplog。9. 寻求外部帮助
若以上步骤无法解决问题,可参考MongoDB官方文档(docs.mongodb.com)、社区论坛(如Stack Overflow的MongoDB标签),或联系MongoDB技术支持(需企业版订阅)提供详细的错误日志和环境信息。