首先确认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
关键过滤技巧:
grep -E 'E|F' /var/log/mongodb/mongod.log
grep -E 'E|F' /var/log/mongodb/mongod.log | awk '$1 > "2025-10-31T14:00"'
日志中的组件标识(如NETWORK、STORAGE、REPL)可快速定位问题模块(如网络连接、存储引擎、副本集同步)。
MongoDB配置文件路径为/etc/mongod.conf,常见需检查的配置项:
net.bindIp(默认127.0.0.1仅本地访问,远程访问需改为0.0.0.0或具体IP);net.port(默认27017,确保未被其他进程占用);storage.dbPath(如/var/lib/mongodb,需存在且有正确权限);systemLog.path(如/var/log/mongodb/mongod.log,需可写入)。sudo systemctl restart mongod
可使用以下命令快速检查配置文件语法:
mongod --config /etc/mongod.conf --eval
若语法错误,命令会返回具体提示。
MongoDB需要对其数据目录(storage.dbPath指定的路径)有读写权限。常见错误为“Permission denied”或“Failed to create lock file”。
sudo mkdir -p /var/lib/mongodb
mongodb用户(MongoDB默认运行用户):sudo chown -R mongodb:mongodb /var/lib/mongodb
0755):sudo chmod -R 0755 /var/lib/mongodb
权限问题是最常见的启动故障之一,需重点排查。
MongoDB默认使用27017端口,若该端口被其他进程占用,会导致服务无法启动。使用以下命令检查端口占用情况:
sudo netstat -tulnp | grep 27017
或使用更现代的ss命令:
sudo ss -tulnp | grep 27017
若发现占用进程,可选择:
sudo kill -9 <PID>);net.port为其他端口(如27018)。若出现“Connection refused”(连接被拒绝)或“无法连接到服务器”错误,需检查以下内容:
systemctl status mongod确认;bindIp:确保允许远程访问(如0.0.0.0);ufw):sudo ufw allow 27017
mongo命令测试连接(本地默认):mongo --host 127.0.0.1 --port 27017
远程连接需替换为服务器IP地址。
若MongoDB无法启动并提示“Corrupted data files”或“WiredTiger error”,需修复数据文件:
sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair --dbpath /var/lib/mongodb
sudo systemctl start mongod
修复前建议备份数据文件(/var/lib/mongodb),避免数据丢失。
对于复杂故障,可使用工具提升日志分析效率:
grep、awk提取关键信息(如上述“查看日志”部分);jq工具解析JSON格式日志(需安装:sudo apt install jq):sudo cat /var/log/mongodb/mongod.log | jq '.msg'
logrotate自动管理日志文件(避免日志过大占用磁盘),编辑/etc/logrotate.d/mongodb:/var/log/mongodb/mongod.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
/bin/kill -SIGUSR1 $(cat /var/lib/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
endscript
}
此配置表示每天轮转日志,保留7天,压缩旧日志,并在轮转后通知MongoDB重新打开日志文件。通过以上步骤,可覆盖Ubuntu上MongoDB的常见故障场景。若问题仍未解决,建议查阅MongoDB官方文档或社区论坛(如Stack Overflow),提供具体日志信息以获取进一步帮助。