确保MongoDB服务(mongod)正在运行。使用以下命令查看服务状态:
sudo systemctl status mongod
若服务未启动,执行以下命令启动并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
服务未运行是连接失败的常见原因,需优先排查。
MongoDB的配置文件(通常位于/etc/mongod.conf)中的net和security部分需正确配置:
bindIp设置为0.0.0.0(允许所有IP连接)或指定客户端IP(如192.168.1.100),避免仅绑定本地(127.0.0.1):net:
port: 27017
bindIp: 0.0.0.0 # 允许所有IP连接(生产环境建议限制为特定IP)
security.authorization设置为enabled,并确认用户凭证正确:security:
authorization: enabled
修改配置文件后,需重启服务使更改生效:
sudo systemctl restart mongod
配置错误(如bindIp设置不当)会导致无法从外部连接。
CentOS的防火墙(firewalld)可能阻止MongoDB的默认端口(27017)。执行以下命令开放端口:
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent # 永久添加规则
sudo firewall-cmd --reload # 重新加载防火墙配置
若使用iptables,可执行:
sudo iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
sudo service iptables save
sudo service iptables restart
防火墙拦截是远程连接失败的常见原因,需确保端口开放。
使用ping命令检查客户端与服务器的网络连通性:
ping <MongoDB服务器IP>
使用telnet或nc命令测试MongoDB端口(27017)是否可达:
telnet <MongoDB服务器IP> 27017
# 或
nc -vz <MongoDB服务器IP> 27017
若无法连通,需排查网络问题(如路由、交换机配置)或服务器IP是否正确。
若MongoDB启用了认证,需确保连接时使用正确的用户名、密码及数据库。例如,创建用户并分配权限:
use admin // 切换到admin数据库
db.createUser({
user: "myUser",
pwd: "myPassword",
roles: [{ role: "readWrite", db: "myDatabase" }] // 分配读写权限
})
连接时需在连接字符串中包含凭证:
mongo -u myUser -p myPassword --authenticationDatabase admin <MongoDB服务器IP>:27017/myDatabase
# 或通过代码(Python示例):
from pymongo import MongoClient
client = MongoClient("mongodb://myUser:myPassword@<MongoDB服务器IP>:27017/myDatabase")
凭证错误或权限不足会导致认证失败。
MongoDB日志文件(通常位于/var/log/mongodb/mongod.log)记录了详细的错误信息。使用以下命令实时查看日志:
tail -f /var/log/mongodb/mongod.log
常见日志错误及解决方法:
ECONNREFUSED:MongoDB服务未启动或端口被占用。auth failed:用户名或密码错误,或用户无对应数据库权限。Network timeout:网络连接问题(如防火墙拦截、服务器IP不可达)。确保客户端使用的连接字符串格式正确。例如:
mongodb://localhost:27017mongodb://username:password@serverIP:27017/database?authSource=adminauthSource指定认证数据库,通常为admin)若客户端使用的驱动程序版本与MongoDB服务器版本不兼容,可能导致连接失败。建议使用与服务器版本匹配的驱动程序(如MongoDB官方驱动、PyMongo等),并参考驱动文档升级。