最快速解法是将主库复制用户认证插件改为mysql_native_password,需确认repl用户plugin为caching_sha2_password且从库last_io_error含authentication requires secure connection或my-002061;alter user必须指定完整host和显式密码并执行flush privileges。

直接改主库复制用户的认证插件为 mysql_native_password 是最快速、最可控的解法,前提是你的主从链路不强制要求 SSL 加密连接。
怎么确认真是 caching_sha2_password 在作祟
别猜,先查主库。用 root 登录后执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'repl';
如果 plugin 列返回 caching_sha2_password,再看从库执行 SHOW REPLICA STATUS\G 的输出里 Last_IO_Error 是否含 Authentication requires secure connection 或 MY-002061 —— 两者同时成立,问题就锁死了。
-
repl@'%' 和repl@'192.168.1.10' 是两个独立账号,必须查准host再操作,漏一个都同步不了 - 云数据库(如阿里云 RDS)通常禁止查
mysql.user表,但ALTER USER一般仍可用
ALTER USER 必须带完整 host 和显式密码
在主库执行这句时,三个要素缺一不可:
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
ALTER USER 'repl'@'192.168.1.%' IDENTIFIED WITH mysql_native_password BY 'your_actual_password';
- @'host' 必须写全,不能只写
'repl';'repl'@'localhost' 和'repl'@'192.168.1.%' 要分别处理 -
BY 'your_actual_password'必须显式写出——MySQL 8.0+ 的ALTER USER ... IDENTIFIED WITH语法不保留原密码,漏掉会导致密码被清空,从库立刻连不上 - 执行完立刻跟
FLUSH PRIVILEGES;,否则内存缓存不更新,变更无效 - 宝塔、phpEnv 等面板环境,改完还得手动重启 MySQL 服务,否则从库 IO 线程可能仍缓存旧状态
为什么改 my.cnf 的 default_authentication_plugin 没用
default_authentication_plugin = mysql_native_password 只影响「之后新建的用户」,对已存在的复制用户完全无效。很多人改完配置、重启 MySQL,发现 repl 的 plugin 字段还是 caching_sha2_password,就是因为这个配置根本不碰存量用户元数据。
- 物理迁移后,主库的
mysql.user表常直接从旧实例拷贝过来,里面混着不同版本的插件记录,repl用户很可能根本没被重建过——它只是“存在”,但认证逻辑已经不匹配当前 MySQL 8.0 的默认行为 - Docker 启动加
--default-authentication-plugin=mysql_native_password同样不修复存量用户 - 云数据库(RDS/CDB)通常禁写配置文件,这条路根本走不通,
ALTER USER是唯一入口
GET_MASTER_PUBLIC_KEY=1 是更安全的替代路径
如果你不想降级认证强度,且主库已生成 RSA 密钥对(MySQL 8.0.4+ 默认自带),可以优先尝试这个参数:
STOP REPLICA;<br>CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='your_pass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154, GET_MASTER_PUBLIC_KEY=1;<br>START REPLICA;
-
GET_MASTER_PUBLIC_KEY=1必须显式写出,不能省略;只对caching_sha2_password用户生效 - 如果主库启用了
require_secure_transport=ON,这条命令会失败,得先关掉或配 SSL - 该方案不改动主库任何用户定义,但依赖从库客户端支持(MySQL 8.0.4+ 才支持此参数)
最容易被忽略的是:你改了插件或加了参数,但从库的 IO 线程可能还卡在旧的失败状态里——必须 STOP REPLICA 再 START REPLICA,不能只靠等待自动重试。










