SSH连接MongoDB遇MongoServerSelectionError超时问题求助
以下是针对你遇到的问题的排查方向和解决方案:
确认本地端口映射准确性
先检查SSH隧道是否确实将远程MongoDB的27017端口映射到本地127.0.0.1:27017。可以用命令查看本地端口监听状态:- Linux/macOS:
netstat -an | grep 27017 - Windows:
netstat -ano | findstr :27017
确保输出里有LISTENING状态的记录,且绑定地址是127.0.0.1。
- Linux/macOS:
补全连接字符串的认证参数
TablePlus可能自动帮你指定了认证数据库,而你手动写的连接字符串缺省了这个关键参数。如果你的MongoDB用户不是在admin库创建的,必须显式声明authSource:mongodb://username:password@127.0.0.1:27017/?authSource=your_user_auth_db另外,
directConnection=true仅适用于单实例MongoDB,如果远程是副本集,这个参数会导致连接失败,建议移除后再试。检查MongoDB服务器的绑定配置
如果远程MongoDB是副本集,节点配置文件里的bindIp或副本集成员地址可能设置为内网IP,导致本地客户端(代码/Compass)无法解析这些地址。而TablePlus可能自动处理了副本集地址的替换,你可以尝试在连接字符串中添加replicaSet=your_replica_set_name参数,同时确保本地能解析副本集成员的地址(必要时修改本地hosts文件)。验证客户端与服务器版本兼容性
你的MongoDB驱动版本或Compass版本可能和远程服务器版本不兼容。比如旧版本驱动不支持MongoDB 5.0+的SCRAM-SHA-256认证,而TablePlus使用的驱动版本刚好支持。可以尝试升级驱动包,或者更换与服务器版本匹配的Compass版本。排查SSH隧道的转发选项
虽然SQL和Redis能正常连接,但MongoDB对TCP连接的参数更敏感。可以尝试关闭SSH隧道的压缩选项,或者调整TCP转发的缓冲区大小,避免因数据包处理异常导致超时。
内容的提问来源于stack exchange,提问作者yummy

