1. 确认故障现象
记录故障发生的频率、具体错误信息(如启动失败、连接被拒绝、查询超时)及触发条件(如重启服务、高并发场景),这是故障排查的基础方向。
2. 检查MongoDB服务状态
使用systemctl
或service
命令确认MongoDB服务是否正在运行:
sudo systemctl status mongod # 推荐(Ubuntu 16.04+)
# 或
sudo service mongod status
若服务未运行,会显示“inactive (dead)”或“failed”状态,需进一步排查启动失败原因。
3. 查看MongoDB日志文件
日志是定位故障的关键,MongoDB默认日志路径为/var/log/mongodb/mongod.log
。使用以下命令实时查看最新日志(重点关注“ERROR”“FAILED”等关键字):
sudo tail -n 100 /var/log/mongodb/mongod.log # 查看最后100行
# 或实时跟踪日志
sudo tail -f /var/log/mongodb/mongod.log
日志中会明确提示错误类型(如配置错误、权限问题、数据损坏)。
4. 验证配置文件正确性
MongoDB主配置文件通常为/etc/mongod.conf
,需检查以下关键配置项:
dbPath
:数据存储目录是否存在(如/var/lib/mongodb
);logPath
:日志文件路径是否有写入权限;port
:端口是否被占用(默认27017);bindIp
:是否允许远程连接(如127.0.0.1
仅本地访问,0.0.0.0
允许所有IP)。sudo systemctl restart mongod
可使用以下命令快速检查配置文件语法:
mongod --config /etc/mongod.conf --eval "print('配置文件语法正确')"
若输出“配置文件语法正确”,则说明配置文件无明显语法错误。
5. 检查数据目录与权限
MongoDB需要对其数据目录(dbPath
)有读写权限。默认数据目录为/var/lib/mongodb
,执行以下命令修复权限问题:
# 确认数据目录是否存在
ls -ld /var/lib/mongodb
# 修改所有者为MongoDB用户(通常为'mongodb')
sudo chown -R mongodb:mongodb /var/lib/mongodb
# 设置正确权限(755为目录通用权限)
sudo chmod -R 755 /var/lib/mongodb
若数据目录损坏(如磁盘故障),可使用mongod --repair
命令修复(需提前备份数据):
sudo mongod --config /etc/mongod.conf --repair
6. 检查端口占用情况
MongoDB默认使用27017端口,若该端口被其他进程占用,会导致服务无法启动。使用以下命令检查端口占用:
sudo netstat -tulnp | grep 27017 # 传统方式
# 或
sudo lsof -i :27017 # 更直观
若发现占用进程(如PID=1234
),可选择停止该进程(sudo kill -9 1234
)或修改MongoDB配置文件中的port
项(如改为27018
)。
7. 分析系统资源状态
磁盘空间不足或内存耗尽会导致MongoDB无法正常运行。使用以下命令检查系统资源:
# 检查磁盘空间使用情况(重点关注根分区“/”)
df -h /
# 检查内存使用情况
free -m
# 检查磁盘I/O性能(需安装sysstat工具)
iostat -x 1 5
若磁盘空间不足(使用率>80%),需清理无用文件(如日志、临时文件);若内存不足,可优化MongoDB缓存设置(如调整storage.wiredTiger.engineConfig.cacheSizeGB
)或增加物理内存。
8. 使用MongoDB内置工具诊断
serverStatus
命令:查看服务器整体状态(连接数、内存使用、锁等待等):mongo --eval "db.serverStatus()"
currentOp
命令:查看当前正在执行的操作(定位慢查询或阻塞操作):mongo --eval "db.currentOp()"
mongostat
工具:实时监控操作统计(如insert/update/delete次数、查询延迟):mongostat
mongotop
工具:查看集合级别的读写耗时(定位热点集合):mongotop
9. 常见问题针对性解决
bindIp
配置(是否允许远程连接)、防火墙设置(sudo ufw allow 27017
)或SELinux状态(sudo setenforce 0
临时关闭)。mongod --repair
修复(可能导致部分数据丢失)。