首先确认MongoDB服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status mongod.service
若服务未启动,尝试启动服务并设置开机自启:
sudo systemctl start mongod.service
sudo systemctl enable mongod.service
若启动失败,需结合日志进一步分析(参考日志分析部分)。
MongoDB的日志文件是故障排查的核心依据,主要查看以下日志:
journalctl命令过滤MongoDB相关错误:sudo journalctl -xe | grep mongod
/var/log/mongodb/mongod.log,使用以下命令实时查看最新日志:sudo tail -f /var/log/mongodb/mongod.log
日志中常见的错误包括配置文件语法错误、数据目录权限问题、端口冲突等。MongoDB的主配置文件为/etc/mongod.conf,需重点检查以下配置项的正确性:
net.port(默认27017)和net.bindIp(如0.0.0.0允许远程连接);storage.dbPath(数据存储目录,如/var/lib/mongo)和systemLog.path(日志文件路径);security.authorization(是否启用身份验证,若启用需确保用户权限正确)。MongoDB进程需要对数据目录和日志目录具有读写权限,默认数据目录为/var/lib/mongo,日志目录为/var/log/mongodb。使用以下命令修正权限:
sudo chown -R mongod:mongod /var/lib/mongo
sudo chown -R mongod:mongod /var/log/mongodb
若权限不足,MongoDB可能无法启动或写入数据。
MongoDB默认使用27017端口,若该端口被其他进程占用,会导致服务无法启动。使用以下命令检查端口占用情况:
sudo netstat -tuln | grep 27017
# 或使用lsof命令
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep 27017
若端口被占用,可通过kill -9 <PID>终止占用进程,或修改/etc/mongod.conf中的net.port配置项更换端口。
df -h命令检查系统磁盘剩余空间,若磁盘空间不足(如小于10%),MongoDB可能无法启动或写入数据;top或htop命令查看系统资源使用情况,确保有足够的内存(建议分配服务器总内存的一半给MongoDB)和CPU资源。若系统启用了SELinux(sestatus显示Enforcing模式),可能会阻止MongoDB的正常运行。可尝试以下方法临时解决:
# 将SELinux设置为permissive模式(不阻止操作,仅记录日志)
sudo setenforce 0
若问题解决,需修改SELinux策略或永久关闭SELinux(/etc/selinux/config中设置SELINUX=disabled)。
若自动启动失败,可尝试手动启动MongoDB,查看详细错误信息:
sudo mongod --config /etc/mongod.conf --fork --logpath /var/log/mongodb/mongod.log
手动启动时,MongoDB会输出更详细的启动过程信息,有助于定位配置或权限问题。
若出现无法连接MongoDB的问题(如客户端报错“Connection refused”),需额外检查以下内容:
sudo firewall-cmd --permanent --add-port=27017/tcp
sudo firewall-cmd --reload
security.authorization: enabled),连接时需提供正确的用户名和密码:mongo -u <username> -p <password> --authenticationDatabase <authDatabase>
net.bindIp设置为127.0.0.1,仅允许本地连接,需修改为0.0.0.0允许远程连接(注意安全风险)。使用MongoDB自带工具监控实例状态和性能:
mongostat(显示每秒操作数、读写延迟等);mongotop(显示集合级别的读写时间);mongo shell执行db.serverStatus()(查看连接数、内存使用、锁情况等)。