新装的数据库在本机 mysql -h 127.0.0.1 能连上,同事从自己电脑连一直转圈,运维只回了一句:telnet 一下 3306,用 telnet 查端口是最快的办法。
Windows 10 以后 telnet 客户端默认不装,直接敲会提示「telnet 不是内部或外部命令」。到控制面板-程序-启用或关闭 Windows 功能,勾上 Telnet 客户端,确定即可,不用重启。
命令格式别写错
telnet 192.168.1.10 3306IP 和端口之间是空格,不是冒号。连上后窗口变黑、光标闪,说明端口通;按 Ctrl+] 再输入 quit 退出。不通会直接报「无法打开到主机的连接。在端口 3306: 连接失败」。
先在本机测 127.0.0.1 加同一个端口。本机通、外面不通,问题在监听地址或防火墙;本机都不通,服务根本没起来。
三种结果三种原因
- 连接失败:本机没监听,或防火墙拦了入站
- 连接超时:网络不通,云服务器多半是安全组没放行
- 连上又立刻断开:服务在,只是协议对不上,属于正常
服务端用 netstat -ano 或 ss -lntp 看监听地址。只监听 127.0.0.1 的端口,外部怎么连都进不来,配置里改成 0.0.0.0 才行。
没有 telnet 用什么替代
PowerShell 里 Test-NetConnection 192.168.1.10 -Port 3306,看 TcpTestSucceeded 是 True 还是 False。Linux 上用 nc -zv 加地址和端口,效果一样。
放行还要看两层
云服务器有安全组,本机还有系统防火墙。Windows 高级安全防火墙里建入站规则,放行对应端口;Linux 上 firewalld 用 firewall-cmd --add-port,ufw 用 ufw allow。两层都放行,端口才算真的开。
它只负责探路。telnet 协议明文传输,别拿它登录公网设备。测通端口就退出来,真正的连接交给 ssh 或数据库客户端。
判断顺序:本机监听正常,外面不通,问题就在网络和防火墙,不在程序本身。