mysql 8.0主从连接失败八成因caching_sha2_password插件强制ssl,需查主库select user,host,plugin确认复制账号插件,再用alter user 'repl'@'host' identified with mysql_native_password by 'pwd'切换并flush privileges。

MySQL 8.0 主从连接失败,八成是 caching_sha2_password 插件在作祟——它默认要求加密连接,而从库 IO 线程走的是普通 TCP,不带 SSL 就直接被拒,报错里出现 Authentication requires secure connection 就是铁证。
确认复制账号用的是 caching_sha2_password 插件
别猜,直接查主库:
- 登录主库,执行
SELECT user, host, plugin FROM mysql.user WHERE user = 'repl';(把repl换成你实际的复制账号名) - 重点看
plugin列:如果是caching_sha2_password,且从库没开 SSL,问题就定位了 - 特别注意
host值:从库连的是'repl'@'192.168.1.20',你就得查这条记录,不是'repl'@'%'
ALTER USER 切换插件是最稳妥的修复方式
在主库上执行,不重启、不改全局配置,只动目标账号:
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'your_repl_password';- 如果从库用具体 IP 连接(比如
CHANGE MASTER TO MASTER_HOST='192.168.1.20'),必须同步改对应host:ALTER USER 'repl'@'192.168.1.20' IDENTIFIED WITH mysql_native_password BY 'your_repl_password'; - 务必带上
BY子句重设密码,否则会清空密码导致永久失联 - 执行
FLUSH PRIVILEGES;——某些云 RDS 或特定版本必须显式刷新才生效
MySQL 8.4+ 环境下 mysql_native_password 插件被禁用怎么办
如果你用的是 MySQL 8.4 或更高版本,ALTER USER ... IDENTIFIED WITH mysql_native_password 报错 Plugin 'mysql_native_password' is not loaded,说明插件被默认关闭了:
- 编辑
my.cnf,在[mysqld]段添加:mysql_native_password=ON - 不要写
default_authentication_plugin,它在 8.4+ 已弃用 - 重启 MySQL:
systemctl restart mysqld(Linux)或net stop MySQL && net start MySQL(Windows) - 重启后立刻再执行
ALTER USER命令,此时插件已加载,命令可成功
权限表结构不一致也会导致“连得上但查不了”
升级到 MySQL 8.0 后手动导入过旧版 mysql 库数据?那很可能字段缺失或格式错误,导致 GRANT 不生效:
- 在主库执行
DESC mysql.user;,确认有authentication_string、account_locked、password_expired等 8.0 必需字段 - 如果字段缺失,硬导入会静默失败;安全做法是停库后执行
mysqld --initialize-insecure --datadir=/var/lib/mysql --user=mysql重建干净的权限表结构 - 再用
pt-show-grants或人工清理过的GRANTSQL 导入权限逻辑,而不是原始INSERT INTO mysql.user行
真正容易被忽略的是:插件切换后,必须确认从库的 CHANGE MASTER TO 语句中 MASTER_USER 和 MASTER_PASSWORD 对应的是刚改过的那个账号——哪怕只差一个字符或大小写,IO 线程照样卡在 Connecting 状态不动。











