首先确认MongoDB服务是否正在运行,使用以下命令查看状态:
sudo systemctl status mongod
若服务未运行,会显示“inactive (dead)”或“failed”状态,需进一步排查启动失败原因。
日志是故障定位的核心,MongoDB的默认日志路径为/var/log/mongodb/mongod.log。使用以下命令查看最新错误信息(按F/E过滤关键级别):
sudo tail -n 100 /var/log/mongodb/mongod.log # 查看最后100行
sudo grep -E 'E|F' /var/log/mongodb/mongod.log | tail -n 20 # 过滤错误/致命日志
日志中的FATAL(致命)或ERROR(错误)条目会明确提示故障原因(如配置错误、权限问题、数据损坏)。
MongoDB的主配置文件为/etc/mongod.conf,常见配置错误包括:
net.port(默认27017)未被其他进程占用;net.bindIp从127.0.0.1修改为0.0.0.0(允许所有IP)或具体IP;storage.dbPath(数据目录)、systemLog.path(日志目录)存在且路径正确。sudo systemctl restart mongod
MongoDB服务通常以mongodb用户(或mongod,取决于安装方式)运行,需确保数据目录、日志目录及套接字文件的权限正确:
/var/lib/mongodb):sudo chown -R mongodb:mongodb /var/lib/mongodb # 归属mongodb用户/组
sudo chmod -R 755 /var/lib/mongodb # 设置合理权限
/tmp/mongodb-27017.sock):sudo chown mongodb:mongodb /tmp/mongodb-27017.sock # 归属mongodb用户/组
sudo chmod 600 /tmp/mongodb-27017.sock # 仅所有者可读写
权限问题常表现为“Permission denied”或“Failed to create lock file”。
sudo netstat -tulnp | grep 27017 # 或使用 ss -tulnp | grep 27017
若端口被其他进程占用,需停止该进程或修改MongoDB的net.port配置。ufw防火墙,需允许MongoDB端口:sudo ufw allow 27017/tcp # 允许TCP协议的27017端口
sudo ufw reload # 重新加载防火墙规则
若日志提示“WiredTiger error”(存储引擎故障)或“Data corruption”(数据损坏),需修复数据文件:
sudo cp -r /var/lib/mongodb /var/lib/mongodb_backup
sudo mongod --config /etc/mongod.conf --repair
sudo systemctl restart mongod
注意:修复过程可能导致部分数据丢失,建议定期备份。
mongod.conf中的bindIp已设置为0.0.0.0;ping <服务器IP>测试)。mongo命令测试连接:mongo --host <服务器IP> --port 27017 # 如 mongo --host 192.168.1.100 --port 27017
若MongoDB因资源不足无法启动,需检查以下指标:
df -h查看磁盘使用率,若根分区或数据分区剩余空间不足(建议保留至少10%),需清理无用文件;free -h查看内存使用情况,若内存不足,可优化查询(添加索引)、增加交换分区(swap)或升级硬件。通过以上步骤,可覆盖Ubuntu上MongoDB的常见故障场景。若问题仍未解决,建议根据日志中的具体错误信息查阅MongoDB官方文档或社区论坛(如Stack Overflow)。