Navicat无法连接到3307端口的Mysql数据库的一种可能
环境:
安装在windows11上的navicat16
安装在vmware workstation pro上的euler24.03
部署在podman里的mysql8.0(端口为3307)
前情提要:
老师在前一晚布置了作业:在虚拟机已经容器化部署的mysql上,本地化部署一个mysql。于是我为了避免端口冲突,将容器化部署的mysql上的3306端口改成了3307,但是当天因为很晚,没有验证是否这个端口能连接上windows上的navicat。
第二天下午,我准备用容器化部署的mysql连接navicat,结果报错


询问了无数次ai,把防火墙等参数放行的放行,要改的修改;咨询了老师,把my.cnf和启动的参数不断地修改,就连老师都以为是我的这俩个地方出了问题;上论坛找和我一样情况的可怜人,我最终在下午6:00前成功连上了数据库。但是当时没有把最终原因找出。
等我回到宿舍之后,把虚拟机重启,好家伙,这个navicat又连接不上去了,当时其实我是怀疑podman的问题(其实不是,并且补充小知识:podman不像docker,它是没有守护进程的,所以他的状态是inactive是正常的!!)
但是我询问了元宝(不得不说它还是非常靠谱!),他否定了,他说我的my.cnf和运行的脚本都没有问题!
它提出:VMware转发规则100%被重启重置了
管理员身份进入Power Shell ,输入:
Test-NetConnection 192.168.199.102 -Port 3307
显示

于是做出修改 :进入vmware,编辑-虚拟网络编辑器-选择wmnet8-选择NAT Settings,在Port Forwarding下面点击"Add",如图所示填写


然后"Apply"应用,最后点击"OK"使配置生效!
再次在Power Shell中输入:Test-NetConnection 192.168.199.102 -Port 3307

输出如上图即为修改规则成功!
尝试连接navicat,成功连接!

总结:
为什么 3306 不受影响,偏偏 3307 挂?
这是这次现象最迷惑的地方,必须讲清:
Windows Navicat
│
├─→ 192.168.199.102:3306 → VMware NAT → 虚拟机自身端口(SSH/原生MySQL)
│ ↑ NAT 默认放行虚拟机"自己起的端口"
│
└─→ 192.168.199.102:3307 → VMware NAT → 【必须走端口转发规则】→ 虚拟机 3307
↑ 这条规则在运行时表里,重启没了
关键认知:VMware NAT 对「虚拟机自己 listen 的端口」(22、3306)是默认放行的,因为那是虚拟机内部服务,NAT 本来就允许 inbound 到 Guest。
但 3307 是宿主机端口 → 要转给虚拟机,必须靠你手动加的「端口转发规则」——这条规则不在 NAT 的"默认放行清单"里,全靠你配的那条记录。
所以重启后:
-
22/3306 → 走 NAT 默认逻辑 → 还在 ✅
-
3307 → 走你配的转发规则 → 规则在运行时表里,重启丢了 → ❌

浙公网安备 33010602011771号