用compass community和java程序连不上远程linux上的mongodb问题解决

本文详细解析了在使用compasscommunity和java程序连接MongoDB时遇到的MongoSocketOpenException异常,深入探讨了异常的根本原因——防火墙及iptables设置,并提供了具体的解决步骤,包括关闭和重启防火墙、检查iptables状态等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用compass community连接时:
在这里插入图片描述
2.用java程序连接时:

com.mongodb.MongoSocketOpenException: Exception opening socket
	at com.mongodb.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.5.0.jar:na]
	at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:107) ~[mongodb-driver-core-3.5.0.jar:na]
	at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:111) ~[mongodb-driver-core-3.5.0.jar:na]
	at java.lang.Thread.run(Unknown Source) [na:1.8.0_171]
Caused by: java.net.SocketTimeoutException: connect timed out
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_171]
	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) ~[na:1.8.0_171]
	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) ~[na:1.8.0_171]
	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[na:1.8.0_171]
	at java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[na:1.8.0_171]
	at java.net.PlainSocketImpl.connect(Unknown Source) ~[na:1.8.0_171]
	at java.net.SocksSocketImpl.connect(Unknown Source) ~[na:1.8.0_171]
	at java.net.Socket.connect(Unknown Source) ~[na:1.8.0_171]
	at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59) ~[mongodb-driver-core-3.5.0.jar:na]
	at com.mongodb.connection.SocketStream.open(SocketStream.java:57) ~[mongodb-driver-core-3.5.0.jar:na]
	... 3 common frames omitted

原因:linux上的防火墙没有关。
我是centos7,关闭防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
开始防火墙:
systemctl start firewalld.service
systemctl enable firewalld.service
查看防火墙状态:
systemctl status firewalld
关闭之后可以正常连接。
补充:第二天连的时候发现连不上了,用systemctl status firewalld查看防火墙是关闭的,百度了很久没解决,无赖查看了一下iptables的状态:systemctl status iptables.service,发现时开启的,centos7应该是没这个命令的,不知道自己是什么时候下的,然后把这个关闭后问题解决了。
关闭iptables:
systemctl stop iptables.service
systemctl disable iptables.service

### MongoDB Compass 连接失败的解决方案 当 MongoDB Compass 遇到连接问题时,可以从以下几个方面进行排查并采取相应的措施: #### 1. **检查网络配置** 如果存在网络问题,则可能导致查询请求无法正确发送至 MongoDB 服务器。确认客户端与服务器之间的网络连通性正常,并确保防火墙未阻止端口 `27017` 或其他自定义端口上的流量[^1]。 #### 2. **验证 URI 地址** URI 地址中的参数错误也可能引发连接异常。以下是标准的 Spring Boot 配置示例用于指定 MongoDB 的连接字符串: ```yaml spring.data.mongodb.uri: mongodb://username:password@host:port/database?authSource=admin&ssl=true ``` 注意替换上述模板中的占位符为实际值(如用户名、密码、主机地址等)。特别强调的是,在使用身份认证的情况下需附加 `authSource` 参数指明授权数据库名称[^4]。 #### 3. **审查用户权限** 假如当前登录账户缺乏必要的操作许可,那么即使物理层面能够抵达目标节点也无法完成预期动作。因此建议重新审视该用户的访问控制列表 (ACL),必要时赋予其更广泛的特权范围以测试目的为例说明如下SQL语句授予读写权限给特定角色成员: ```sql use admin; db.createUser({ user:"myUserAdmin", pwd:"abc123", roles:[{role:"root", db:"admin"}] }); ``` #### 4. **启动修复模式** 对于某些情况下由于文件损坏等原因造成的不可达状况可以尝试运行修复命令恢复受损的数据集结构: ```bash /usr/local/mongodb/bin/mongod --repair --dbpath=/mongodb/single/data/db/ ``` 此过程会扫描整个存储目录寻找潜在的问题区域加以修正从而提高后续交互的成功率[^3]。 #### 5. **更新软件版本** 考虑到官方持续改进产品功能以及安全性补丁等因素影响, 推荐始终维持最新稳定版部署环境当中去享受这些进步带来的好处; 同样地也可以参照官方网站获取对应平台下的安装包链接自行升级实例化后的服务进程^[2]^. 通过以上方法逐一排除干扰因素之后应该能有效缓解乃至彻底消除由MongoDBCompass所触发的各种类型的联机障碍现象.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值