在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
若需筛选特定时间段或错误类型(如慢查询),可使用mtools工具(需提前安装):
# 安装mtools
sudo pip3 install mtools
# 筛选2025-09-01以来的慢查询(耗时超过60秒)
sudo mlogfilter /var/log/mongodb/mongod.log --from "2025-09-01" --slow 60000
日志中常见错误包括“Permission denied”(权限问题)、“Port already in use”(端口占用)、“Failed to start database”(数据目录损坏)等。
MongoDB主配置文件路径为**/etc/mongod.conf**,需检查以下关键配置项:
sudo systemctl restart mongod
可使用以下命令快速检查配置文件语法:
mongod --config /etc/mongod.conf --eval "printjson(db.adminCommand({ping:1}))"
若语法错误,命令会返回具体报错信息。
MongoDB数据目录(由dbPath指定,默认为“/var/lib/mongodb”)需满足以下条件:
sudo mkdir -p /var/lib/mongodb创建;sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
权限问题常导致“Failed to start database”或“Cannot write to data directory”错误。
MongoDB默认使用27017端口,需确保端口未被占用:
sudo netstat -tulnp | grep 27017
若端口被占用,可通过kill -9 <PID>终止占用进程,或修改配置文件中的port项。
同时,需开放防火墙端口(若启用ufw):
sudo ufw allow 27017
远程连接时,还需确保客户端防火墙允许出站连接到该端口。
若需远程连接MongoDB,需完成以下配置:
sudo systemctl restart mongod;MongoDB性能问题常与系统资源不足相关,需检查以下指标:
free -h(确保剩余内存足够,避免OOM Killer终止进程);df -h(确保数据目录所在分区有足够空间,建议保留至少20%空闲空间);top或htop(确保CPU占用率未长期超过80%)。sudo systemctl stop mongod
sudo mongod --dbpath /var/lib/mongodb --repair
sudo systemctl start mongod
通过以上步骤,可覆盖Ubuntu上MongoDB故障的常见场景。若问题仍未解决,建议查阅MongoDB官方文档(如MongoDB故障排查指南)或社区论坛(如Stack Overflow)获取更具体的帮助。