首先确认MongoDB服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status mongod
若服务未启动,尝试启动服务并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
若启动失败,需结合日志进一步分析原因。
日志是故障排查的核心依据,默认日志路径为/var/log/mongodb/mongod.log。使用以下命令实时查看最新日志:
tail -f /var/log/mongodb/mongod.log
重点关注错误关键词(如“ERROR”“Failed”“Permission denied”“Address already in use”),这些信息能直接指向故障根源(如配置错误、端口冲突、权限问题)。
MongoDB的配置文件默认位于/etc/mongod.conf,需检查以下关键参数是否设置正确:
bindIp:确认是否允许当前主机访问(如127.0.0.1表示仅本地访问,若需远程访问需添加IP地址);port:默认端口为27017,确保未被其他进程占用;dbPath:数据存储路径是否存在且可写;logPath:日志文件路径是否正确。mongod --config /etc/mongod.conf --configtest
若语法有误,需修改配置文件后重新测试。
MongoDB默认使用27017端口,若该端口被其他进程占用,会导致服务无法启动。使用以下命令检查端口占用:
sudo netstat -tulnp | grep 27017
若发现占用进程,可通过kill -9 <PID>终止该进程(需确认进程无重要用途),或修改MongoDB配置文件中的port参数更换端口。
MongoDB数据目录(由dbPath指定)需由mongod用户拥有读写权限。使用以下命令检查目录权限:
ls -ld /var/lib/mongodb # 默认数据目录
若权限不正确,可使用以下命令修改(假设数据目录为/var/lib/mongodb):
sudo chown -R mongod:mongod /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
权限问题常导致“Permission denied”错误,需优先排查。
系统资源不足(如磁盘空间耗尽、内存不足)会导致MongoDB无法正常运行。使用以下命令检查资源使用情况:
df -h
若磁盘空间使用率超过80%,需清理无用文件(如旧日志、备份)释放空间。free -h
若内存不足,需优化MongoDB配置(如调整wiredTiger缓存大小)或增加物理内存。top
若CPU占用过高,需检查是否有慢查询或高并发操作,优化查询语句或增加索引。使用MongoDB自带的命令获取实例详细状态,帮助定位性能瓶颈或异常:
mongo --host localhost --port 27017
db.serverStatus()
重点关注以下指标:
connections:当前连接数(若接近maxIncomingConnections限制,需调整配置);locks:锁等待情况(若globalLock.ratio过高,说明存在锁竞争);memory:内存使用情况(若residentMemory过高,说明内存不足);opcounters:操作计数(如insert、query次数,判断负载情况)。若MongoDB因异常关闭(如系统崩溃、强制杀进程),可能导致数据目录下存在mongod.lock锁文件,阻止服务启动。需删除锁文件并修复数据库:
sudo rm /var/lib/mongodb/mongod.lock # 删除锁文件
sudo mongod --dbpath /var/lib/mongodb --repair # 修复数据库
修复完成后,重新启动服务即可。
若系统启用了SELinux(sestatus显示Enforcing模式),可能会阻止MongoDB访问数据目录或端口。可临时将SELinux设置为permissive模式排查问题:
sudo setenforce 0
若问题解决,需调整SELinux策略(如允许MongoDB访问数据目录):
sudo chcon -R -t mongod_var_lib_t /var/lib/mongodb # 修改数据目录SELinux上下文
或永久关闭SELinux(需谨慎,影响系统安全性):
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
若以上步骤均无法解决问题,可通过以下途径获取进一步支持: