为何MySQL Workbench无需开放端口即可连接远程MySQL数据库?
Workbench用了SSH隧道而非直连
多数人配置Workbench远程连接时会开启SSH隧道模式。这种模式下,Workbench先通过SSH连到远程服务器,再在服务器内部访问本地的MySQL端口(一般是3306),完全不需要对外开放3306端口。而IDEA如果是直连远程3306,端口一关自然就超时了。去Workbench的连接配置里看看,是不是开了SSH选项。本地端口转发/代理配置不一样
你的系统或者Workbench可能单独设了本地端口转发(比如用ssh -L 3306:localhost:3306 user@remote-server这类命令),或者Workbench用了系统代理,但IDEA没配对应的代理。这种情况下,Workbench通过转发的本地端口或代理间接访问远程库,IDEA直接请求远程端口就被防火墙拦了。MySQL用户权限的连接来源限制
查下MySQL的用户权限:有些用户被设置只能从localhost或特定IP段连接。Workbench走SSH隧道的话,MySQL识别的是服务器本地的连接(也就是localhost),所以有权限;但IDEA直连是从你的本地IP发起,没对应权限——不过这种情况一般提示“access denied”,但也不排除防火墙先拦截请求导致超时。防火墙/安全组的规则例外
服务器防火墙或云服务商安全组可能给Workbench的发起IP开了特例,或者Workbench用的SSH端口(默认22)一直是开放的,而IDEA用的3306端口被关了。另外,有些防火墙会按连接协议或应用特征做规则,比如允许Workbench的流量但拦IDEA的,这种情况少见,但可以抓包验证。
内容的提问来源于stack exchange,提问作者LeapFrog

