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 → 走你配的转发规则 → 规则在运行时表里,重启丢了 → ❌

posted @ 2026-07-24 20:09  GuiGui321  阅读(6)  评论(0)    收藏  举报