mysql远程连接失败主因是bind-address默认为127.0.0.1、用户host不匹配、防火墙/安全组拦截、8.0+认证插件不兼容,需逐一验证并配置。

bind-address 默认值锁死本地连接
MySQL 默认只监听 127.0.0.1,远程客户端连不上不是密码错,是根本没收到请求。关键在 my.cnf(或 mysqld.cnf)里 bind-address 配置项。
常见错误:改了但没生效,因为配置文件位置不对(Ubuntu 多在 /etc/mysql/mysql.conf.d/mysqld.cnf,CentOS 多在 /etc/my.cnf 或 /etc/my.cnf.d/mariadb-server.cnf),或者改完没重启服务。
- 把
bind-address = 127.0.0.1改成bind-address = 0.0.0.0(监听所有 IPv4 接口) - 如果只要特定网段,比如内网
192.168.1.0/24,可写bind-address = 192.168.1.100(本机该网段 IP) - 改完必须执行
sudo systemctl restart mysql(或mariadb),用sudo netstat -tlnp | grep :3306确认监听的是*:3306而非127.0.0.1:3306
CREATE USER 和 GRANT 权限不等于远程可用
用 CREATE USER 'foo'@'localhost' 创建的用户,'foo'@'%' 是另一个完全不同的账号。远程连接时 MySQL 认的是 user@host 全匹配,'%' 表示任意 host,但不包括 localhost(这是个特殊别名,优先级高于 %)。
常见错误:以为给 root 开了权限就行,但 root 默认是 'root'@'localhost',远程连 root 实际走的是 'root'@'%' —— 这个账号很可能根本不存在。
- 新建远程用户:先
CREATE USER 'appuser'@'%' IDENTIFIED BY 'strong-pass-123'; - 再赋权:
GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'appuser'@'%'; - 别漏掉
FLUSH PRIVILEGES;(虽然 8.0+ 大多不用,但安全起见仍建议执行) - 如果只允许某 IP 连接,把
'%'换成具体 IP,如'appuser'@'192.168.1.50'
防火墙和云平台安全组常被忽略
MySQL 服务起来了、用户也授权了,但还是连不上?大概率卡在中间层。Linux 自带的 ufw 或 firewalld 默认会拦 3306 端口;阿里云、腾讯云等控制台的安全组规则更是独立于系统防火墙存在。
常见错误:只关了系统防火墙,忘了云平台安全组;或者开了 3306 却设成了仅限内网 IP;又或者用了 IPv6 地址但安全组只放行了 IPv4。
- 检查本地防火墙:
sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS) - 开放端口:
sudo ufw allow 3306或sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload - 云服务器务必登录控制台,在「安全组」里添加入方向规则:协议 TCP,端口 3306,源 IP 填具体 IP 或
0.0.0.0/0(后者慎用)
MySQL 8.0 默认认证插件导致客户端报错
MySQL 8.0+ 默认用 caching_sha2_password 插件,而老版本 MySQL 客户端、部分 Python 驱动(如旧版 PyMySQL)、甚至 Navicat 低版本会直接报 Authentication plugin 'caching_sha2_password' cannot be loaded。
这不是权限或网络问题,是握手阶段就失败了。强行降级认证方式比升级所有客户端更现实。
- 建用户时指定插件:
CREATE USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'pass'; - 或修改已有用户:
ALTER USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'pass'; - 也可以全局改默认插件,在
my.cnf的[mysqld]下加一行:default_authentication_plugin=mysql_native_password(需重启)
真正麻烦的不是改哪几行配置,而是每个环节都得验证——监听地址、用户 host、防火墙、认证插件,四者缺一不可。少查一个,就卡在“连不上”的假象里反复折腾。











