Debian系统下MongoDB故障排查常见步骤
使用systemctl或service命令确认MongoDB服务是否正在运行,若未运行则尝试启动服务。
sudo systemctl status mongod # Debian 9+推荐使用systemd
# 或
sudo service mongod status # 旧版本Debian可能使用sysvinit
若服务未启动,可通过sudo systemctl start mongod启动,并通过sudo systemctl enable mongod设置开机自启。
MongoDB日志是故障排查的核心线索,通常位于/var/log/mongodb/mongod.log(部分旧版本可能在/usr/local/mongodb/logs/)。使用以下命令实时查看最新日志或搜索关键词(如ERROR、FATAL):
sudo tail -f /var/log/mongodb/mongod.log # 实时查看最新日志
sudo grep "ERROR" /var/log/mongodb/mongod.log # 筛选错误信息
日志中会明确提示服务启动失败、权限不足、端口冲突等具体原因。
MongoDB的主配置文件通常为/etc/mongod.conf(部分手动安装可能在/usr/local/mongodb/bin/mongodb.conf),需检查以下关键配置项:
storage.dbPath:数据存储目录是否存在(如/var/lib/mongodb);systemLog.path:日志文件路径是否正确且有写入权限;net.bindIp:绑定的IP地址(127.0.0.1仅本地访问,0.0.0.0允许远程访问,需根据需求调整);net.port:端口是否被占用(默认27017)。mongod --config /etc/mongod.conf --eval # 无报错则表示语法正确
MongoDB需要对数据目录(storage.dbPath指定的路径)有读写权限,否则会导致服务无法启动。常见操作如下:
sudo mkdir -p /var/lib/mongodb # 若目录不存在则创建
sudo chown -R mongodb:mongodb /var/lib/mongodb # 修改所有者为mongodb用户
sudo chmod -R 755 /var/lib/mongodb # 设置合理权限(避免777)
注意:部分旧版本可能使用/usr/local/mongodb/data/db作为数据目录,需根据实际配置调整。
MongoDB默认使用27017端口,若该端口被其他进程占用或防火墙阻止,会导致连接失败。
sudo netstat -tulnp | grep 27017 # 查看端口占用进程
sudo lsof -i :27017 # 替代命令(更直观)
若端口被占用,可停止占用进程(sudo kill -9 <PID>)或修改MongoDB配置文件中的net.port。ufw防火墙,需允许27017端口:sudo ufw allow 27017/tcp # 允许TCP连接
sudo ufw reload # 重新加载防火墙规则
针对性能问题(如查询慢、响应时间长),可使用MongoDB自带工具进行监控:
mongostat --host 127.0.0.1:27017 # 监控本地实例
mongotop --host 127.0.0.1:27017
db.collection.find().explain("executionStats"))。MongoDB的性能受系统资源限制,需通过以下命令检查资源占用:
top、htop(实时查看进程资源占用);vmstat 1(查看磁盘读写速率)、iostat -x 1(详细I/O统计);df -h(查看磁盘剩余空间,需预留足够空间给WiredTiger存储引擎)。storage.wiredTiger.engineConfig.cacheSizeGB)。systemctl status mongod)、端口正确(netstat -tulnp | grep 27017)、防火墙允许连接(ufw allow 27017);explain()分析查询计划,添加合适索引(如db.collection.createIndex({field: 1})),优化查询语句(避免全表扫描);rs.status()),确认主从同步正常,重试失败操作;/var/log/mongodb/mongod.log),常见原因包括配置文件错误、数据目录权限不足、端口冲突。