Ubuntu下MongoDB故障排查指南
首先确认MongoDB服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status mongod
若服务未运行(显示“inactive”或“failed”),尝试启动服务:
sudo systemctl start mongod
若需设置开机自启,执行:
sudo systemctl enable mongod
MongoDB日志是故障排查的核心依据,默认路径为/var/log/mongodb/mongod.log。使用以下命令实时查看最新日志:
sudo tail -f /var/log/mongodb/mongod.log
重点关注错误关键词(如“ERROR”“Failed”“Permission denied”“Address already in use”),这些信息能直接指向问题根源(如配置错误、权限不足、端口冲突)
MongoDB的主配置文件为/etc/mongod.conf,需检查以下关键配置项的正确性:
net.bindIp:确保绑定IP正确(如0.0.0.0允许远程连接,127.0.0.1仅本地访问);net.port:确认端口未被占用(默认27017);storage.dbPath:数据目录是否存在(如/var/lib/mongodb);systemLog.path:日志文件路径是否可写。sudo systemctl restart mongodmongod --config /etc/mongod.conf --configtestMongoDB数据目录(由storage.dbPath指定)的权限直接影响服务运行:
sudo mkdir -p /var/lib/mongodb(若不存在则创建);mongodb用户(Ubuntu默认用户):sudo chown -R mongodb:mongodb /var/lib/mongodb;ls -l /var/lib/mongodb(应为drwxr-xr-x,即755权限)sudo netstat -tulnp | grep 27017kill -9 <PID>)或修改MongoDB配置文件中的port项。ufw防火墙,需允许MongoDB端口:sudo ufw allow 27017sudo ufw status(确保端口开放)若需远程连接MongoDB,需完成以下配置:
/etc/mongod.conf,将net.bindIp设置为0.0.0.0(允许所有IP访问);sudo ufw allow 27017;security.authorization: enabled(默认开启),需创建远程访问用户:use admin
db.createUser({user: "remote_user", pwd: "strong_password", roles: ["readWrite", "dbAdmin"]})
远程连接时需指定用户名和密码:mongo --host <server_ip> -u remote_user -p strong_password --authenticationDatabase adminMongoDB性能问题常与系统资源不足相关,需检查以下指标:
free -h(确保可用内存充足,避免频繁使用交换分区);df -h(数据目录所在分区剩余空间应大于数据量的20%);top或htop(若CPU使用率持续100%,需优化查询或升级硬件)若出现查询缓慢、写入延迟等问题,可使用以下工具定位瓶颈:
db.runCommand({setParameter: 1, slowms: 100})/var/log/mongodb/mongod.log,分析慢查询并优化(如添加索引)。db.currentOp():查看当前正在执行的操作(识别长时间运行的查询);db.serverStatus():查看MongoDB运行时状态(内存、连接数、锁等待等);mongostat:实时监控操作速率(如读写次数、延迟)sudo chown -R mongodb:mongodb /var/lib/mongodb修复权限;mongod --repair修复(需停止服务):sudo systemctl stop mongodsudo mongod --dbpath /var/lib/mongodb --repairsudo systemctl start mongod;