MySQL用户host设为%仍连不上,因需同时满足五层条件:MySQL监听外网、用户host匹配、系统防火墙放行、云安全组开放、SSL协议兼容。
MySQL 用户 host 设置为 % 为什么还是连不上
host 设为
只解决 mysql 层面的授权问题,不等于网络可达。常见现象是客户端报错
或直接超时,其实根本没走到认证阶段。
实操建议:
确认用户实际生效的 host:执行
,注意 MySQL 8.0+ 默认创建的是
,
是另一条独立记录
host 用
不能匹配 localhost(Unix socket 连接),远程连接必须走 TCP,测试时显式指定
,别用
混淆
MySQL 8.0+ 默认认证插件是
,旧客户端可能不兼容,建用户时加
Linux
防火墙
放行 3306 端口但依然拒绝连接
iptables/nftables 规则顺序和默认策略常被忽略。现象是 telnet 服务器 IP 3306 直接显示
,而非 timeout —— 这说明请求压根没到 MySQL,被防火墙或服务监听配置拦下了。
实操建议:
先查 MySQL 是否监听外网:运行
,看到
或具体 IP 才对;若只有
,需改
并重启 mysqld
firewalld 放行要指定服务名或端口:用
,别只加
(该 service 默认只开 3306,但部分系统模板未启用)
云服务器(如阿里云、AWS)安全组是独立一层,必须单独配置入方向规则,且优先级高于系统防火墙
MySQL 8.0 开启远程访问后 SSL 报错:SSL connection error: protocol version mismatch
MySQL 8.0 默认强制客户端使用 TLS 1.2+,但很多工具(尤其是老版本 phpMyAdmin、某些 JDBC 驱动)协商失败就直接断开,错误日志里会出现
。
实操建议:
临时绕过(仅调试):客户端连接加参数
,或 URL 中加
生产环境应配证书:在 MySQL 配置中设置
、
、
,然后用
确认状态为
若用自签名证书,客户端需显式信任 CA,比如 JDBC 要加
Windows Server 上 MySQL 远程连接失败,但 Linux 客户端能连
本质是 Windows 防火墙默认阻止入站 TCP 连接,且规则按“应用路径”而非端口匹配。现象是 Windows 客户端 telnet 自己的 3306 成功,但外部连不上,
显示监听正常。
实操建议:
进“高级安全 Windows 防火墙”,新建入站规则 → 端口 → TCP 3306 → 允许连接 → 配置作用域(建议限制源 IP 段)
检查规则是否启用:右键规则 → “属性” → “常规”选项卡里“启用此规则”必须勾选
别依赖“公用/专用配置文件”自动切换,手动在两个配置文件里都启用该规则更稳妥
真正卡住人的从来不是单点配置,而是 MySQL 的 bind-address、用户 host、系统防火墙、云平台安全组、客户端 SSL 协商这五层叠加判断。漏掉任意一层,都会表现为“明明设了 % 却连不上”。
%error 1045 (28000): access denied for userSELECT user, host FROM mysql.user WHERE user = 'your_user';'user'@'localhost''user'@'%'%-h 服务器IP-h 127.0.0.1caching_sha2_passwordIDENTIFIED WITH mysql_native_passwordConnection refusedss -tlnp | grep :33060.0.0.0:3306127.0.0.1:3306bind-address = 0.0.0.0firewall-cmd --permanent --add-port=3306/tcp--add-service=mysqlFailed to set up SSL because of handshake error--ssl-mode=DISABLED&useSSL=falsessl-cassl-certssl-keySHOW VARIABLES LIKE '%ssl%';YES&serverSslCert=/path/to/ca.pemnetstat -an | findstr :3306