首先确认MongoDB服务是否正在运行。使用以下命令查看服务状态:
sudo systemctl status mongod
若服务未启动,执行以下命令启动:
sudo systemctl start mongod
若服务启动失败,需检查日志(/var/log/mongodb/mongod.log)定位具体原因(如配置文件错误、数据目录权限问题等)。
MongoDB默认监听27017端口,需确保客户端与服务器之间的网络畅通,且端口未被防火墙拦截。
telnet <MongoDB服务器IP> 27017
若连接失败,需检查防火墙规则(如iptables或firewalld):sudo firewall-cmd --add-port=27017/tcp --permanent # CentOS/Fedora
sudo firewall-cmd --reload
若使用云服务器,还需检查安全组规则是否放行27017端口。默认情况下,MongoDB仅允许**localhost(127.0.0.1)**连接(bindIp: 127.0.0.1)。若需远程连接,需修改配置文件(/etc/mongod.conf):
net:
bindIp: 0.0.0.0 # 允许所有IP连接(生产环境建议限制为特定IP)
port: 27017
修改后重启服务:
sudo systemctl restart mongod
注意:bindIp: 0.0.0.0会暴露数据库到公网,需配合防火墙或云安全组限制访问IP。
确保客户端使用的连接字符串格式正确,尤其是主机名/IP和端口:
mongo --host <服务器IP> --port 27017 -u <用户名> -p <密码> --authenticationDatabase admin
localhost失败,可尝试替换为127.0.0.1(排除DNS解析问题)。若网络延迟较高,需调整客户端的连接超时和套接字超时参数(以Java驱动为例):
MongoClientOptions options = MongoClientOptions.builder()
.connectTimeout(30000) // 连接超时时间(毫秒,默认10秒)
.socketTimeout(60000) // 套接字超时时间(毫秒,默认无限制)
.serverSelectionTimeout(10000) // 服务器选择超时时间(毫秒,默认30秒)
.build();
MongoClient client = MongoClients.create("mongodb://<服务器IP>:27017", options);
connectTimeout:控制连接建立的超时时间,可根据网络状况适当延长(如30秒);serverSelectionTimeout:控制选择合适服务器的超时时间(如10秒),避免长时间等待。高负载或资源不足(CPU、内存、磁盘IO)可能导致MongoDB响应缓慢,进而引发超时。使用以下命令监控服务器状态:
top # 查看CPU、内存使用率
df -h # 查看磁盘空间
mongostat # 查看MongoDB操作统计(需安装)
若资源使用率过高,需优化查询(如添加索引)、增加服务器资源或升级MongoDB版本。
若MongoDB因异常关闭(如kill -9)导致无法启动,可能会残留锁文件。需清理锁文件并修复数据库:
sudo rm /var/lib/mongo/mongod.lock # 删除锁文件
sudo mongod --repair --dbpath /var/lib/mongo # 修复数据库
sudo systemctl start mongod
注意:--repair操作会修复数据文件,但可能导致部分数据丢失,建议提前备份。
若以上步骤均无法解决,需查看MongoDB日志(/var/log/mongodb/mongod.log)获取详细错误信息:
tail -f /var/log/mongodb/mongod.log # 实时查看日志
常见日志错误及解决方法:
ECONNREFUSED:连接被拒绝,需检查服务状态和端口;auth failed:认证失败,需检查用户名、密码或认证数据库;Network timeout:网络超时,需检查网络连通性。通过以上步骤逐一排查,可有效解决Linux环境下MongoDB连接超时的问题。需根据具体错误信息调整解决策略,优先排查服务状态、网络连通性和配置文件等基础问题。