MySQL网络不通需分层排查:先确认服务是否运行并监听0.0.0.0:3306,再检查防火墙及云安全组是否放行3306端口,接着用ping和telnet验证网络连通性,最后核查用户权限与认证插件兼容性。

MySQL环境搭建时网络不通,核心要分清是服务没起来、防火墙拦了、还是客户端连错了地址和端口。先确认MySQL服务本身是否正常监听,再逐层检查网络链路。
确认MySQL服务是否运行并正确监听
很多“连不上”其实是MySQL压根没启动,或只监听了本地回环地址(127.0.0.1),不响应外部请求。
- 登录服务器,执行 systemctl status mysqld(或 service mysql status)看服务状态
- 用 netstat -tuln | grep :3306 或 ss -tuln | grep :3306 查看3306端口是否在监听
- 若只看到 127.0.0.1:3306,说明MySQL默认绑定本地,需修改配置文件中 bind-address = 0.0.0.0(或注释掉该行),然后重启服务
- 检查 skip-networking 是否被启用(配置中存在且为ON会彻底禁用TCP连接,必须关闭)
检查服务器防火墙是否放行3306端口
即使MySQL监听了0.0.0.0,Linux防火墙(iptables/firewalld)或云厂商安全组也可能拦截连接。
- CentOS 7+/RHEL:运行 firewall-cmd --list-ports,若无3306/tcp,执行 firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload
- Ubuntu/Debian(ufw):运行 ufw status,若未启用可临时关掉测试:ufw disable;若启用则加规则:ufw allow 3306
- 阿里云/腾讯云/AWS等:务必检查控制台里的“安全组规则”,添加入方向规则:端口3306,协议TCP,源IP可设为0.0.0.0/0(测试用)或指定客户端IP段
验证从客户端能否到达服务器IP和端口
别急着用mysql命令连,先用基础网络工具定位卡在哪一层。
- 客户端执行 ping 服务器IP:不通说明路由/网络策略问题(如跨VPC未打通、本地网络限制)
- 执行 telnet 服务器IP 3306 或 nc -zv 服务器IP 3306:能连上表示网络和端口可达;连不上但ping通,大概率是防火墙或MySQL未监听
- 若使用域名连接,加一步 nslookup 域名 或 dig 域名,确认DNS解析正确,避免连错机器
检查MySQL用户权限与认证方式
网络通了但提示“Access denied”,常因用户没授权远程访问或密码插件不兼容。
- 登录MySQL后执行:SELECT host, user, plugin FROM mysql.user; 确认目标用户host不是localhost(应为'%'或具体IP)
- 执行:GRANT ALL ON *.* TO 'youruser'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
- 若用MySQL 8.0+,默认auth_plugin是caching_sha2_password,部分旧客户端不支持,可改为:ALTER USER 'youruser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
排查网络问题本质是分层验证:服务进程 → 端口监听 → 本机防火墙 → 网络中间设备(路由器、云安全组)→ 客户端路由与工具。每步用最小命令验证,比反复重装快得多。










