bind-address 限制了谁也连不上
MySQL 默认只监听
127.0.0.1,哪怕你改了用户权限、开了防火墙,远程连接照样失败——因为请求根本没进 MySQL 进程。关键配置在
/etc/mysql/my.cnf(或
/etc/my.cnf)里,找到这一行:
bind-address = 127.0.0.1
把它注释掉(加
#),或者改成
bind-address = 0.0.0.0(监听所有 IPv4 地址)。改完必须重启服务:
systemctl restart mysql(Ubuntu/Debian)或
systemctl restart mysqld(CentOS/RHEL)。
user 表 host 字段决定“能不能登录”
即使网络通了,MySQL 还会查
mysql.user表:只有
user和
host同时匹配,才允许登录。默认的
'root'@'localhost'只认本机,远程来的
'root'@'192.168.1.100'或
'root'@'%'是完全不同的账号。 不要直接
UPDATE user SET host='%' WHERE user='root'—— 这会覆盖原有记录,可能引发权限混乱 推荐用
GRANT创建新账号或扩权:
GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'your_strong_password';执行后务必
FLUSH PRIVILEGES;,否则变更不生效
MySQL 8.0 的 plugin 加密方式导致 Navicat 报 2059 错误
MySQL 8.0 默认用
caching_sha2_password插件,但很多客户端(Navicat、旧版 JDBC 驱动)只认
mysql_native_password。现象是:密码没错,但报
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded。
解决方法是显式指定插件并重设密码:
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';<br>FLUSH PRIVILEGES;
注意:不是改
authentication_string字段,而是用
IDENTIFIED WITH语法;如果用户不存在,先
CREATE USER再
ALTER。
别忘了云服务器的安全组和本地防火墙
本地改完,远程还是连不上?大概率卡在中间层:
腾讯云/阿里云/AWS 等都有「安全组」,默认关闭3306端口,必须手动放行(源 IP 可设为
0.0.0.0/0或限定具体 IP 段) Linux 本机防火墙也要开:
firewall-cmd --permanent --add-port=3306/tcp+
firewall-cmd --reload检查是否误启了
skip-grant-tables(配置文件里有这行就全关权限校验,但也会导致授权失效)
真正能连上的链路是:远程客户端 → 云安全组 → 服务器防火墙 → MySQL bind-address → user 表 host+plugin+密码校验。漏掉任意一环,都是 “Access denied” 或 “Connection refused”。
