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';排查网络问题本质是分层验证:服务进程 → 端口监听 → 本机防火墙 → 网络中间设备(路由器、云安全组)→ 客户端路由与工具。每步用最小命令验证,比反复重装快得多。
