首先确认MongoDB服务是否正在运行,这是连接的基础。使用以下命令查看服务状态:
sudo systemctl status mongod
若服务未启动,执行以下命令启动并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
若启动失败,需查看日志进一步排查(参考步骤3)。
MongoDB默认仅允许本地连接(bindIp: 127.0.0.1),需修改配置文件以允许远程访问。配置文件路径通常为/etc/mongod.conf,使用以下命令编辑:
sudo vim /etc/mongod.conf
找到net section,修改bindIp为0.0.0.0(允许所有IP连接)或指定客户端IP:
net:
port: 27017
bindIp: 0.0.0.0 # 或如 192.168.1.100(服务器IP)
修改后必须重启服务使配置生效:
sudo systemctl restart mongod
注意:若配置文件语法错误(如YAML格式问题),会导致服务无法启动,可使用在线YAML验证工具检查。
CentOS的防火墙(firewalld或ufw)可能阻止MongoDB端口(默认27017)的访问。
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent # 永久开放端口
sudo firewall-cmd --reload # 重新加载配置
sudo ufw allow 27017/tcp
开放端口后,可通过telnet测试连通性(见步骤5)。
使用ping命令检查客户端与服务器之间的网络是否可达:
ping <服务器IP>
若ping不通,需排查网络问题(如路由器配置、防火墙拦截)。
使用telnet或nc命令测试MongoDB端口是否开放:
telnet <服务器IP> 27017
# 或
nc -vz <服务器IP> 27017
若连接失败,说明网络或防火墙仍有问题。
若MongoDB启用了身份验证(security.authorization: enabled,需在配置文件中设置),连接时需提供正确的用户名、密码及认证数据库。
use admin // 切换到admin数据库
db.createUser({
user: "myUser",
pwd: "myPassword",
roles: [{ role: "readWrite", db: "myDatabase" }] // 分配权限
})
mongo --host <服务器IP> --port 27017 -u myUser -p myPassword --authenticationDatabase admin
若认证失败,需检查用户名、密码是否正确,或用户权限是否足够。
若以上步骤均无法解决问题,需查看MongoDB日志获取详细错误信息。日志文件通常位于/var/log/mongodb/mongod.log,使用以下命令查看实时日志:
sudo tail -f /var/log/mongodb/mongod.log
常见日志错误及解决方法:
若MongoDB端口(默认27017)被其他进程占用,会导致服务无法启动。使用以下命令查看端口占用情况:
sudo netstat -tuln | grep 27017
# 或
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep 27017
若发现占用进程,可终止该进程(kill -9 <PID>)或修改MongoDB的port配置(参考步骤2)。
SELinux可能阻止MongoDB访问数据目录或端口。
sudo setenforce 0
若禁用后连接正常,需永久禁用(编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive)或配置SELinux策略。sudo chcon -Rv --type=mongod_var_lib_t /var/lib/mongo # 数据目录
sudo chcon -Rv --type=mongod_log_t /var/log/mongodb # 日志目录
更多SELinux配置可参考官方文档。若系统资源(内存、磁盘空间、CPU)不足,MongoDB可能无法正常运行或拒绝连接。
df -h
若磁盘空间不足(如/分区使用率超过80%),需清理无用文件。free -h
若内存不足,可优化MongoDB配置(如增加wiredTiger缓存)或增加服务器内存。MongoDB数据目录(默认/var/lib/mongo)必须由mongod用户拥有,否则服务无法启动。使用以下命令修改权限:
sudo chown -R mongod:mongod /var/lib/mongo
若数据目录路径被修改(如在配置文件中设置了dbPath),需修改对应目录的权限。