必须在my.cnf的[mysqld]段添加mysql_native_password=ON并重启服务,运行中无法启用;插件激活后才能执行ALTER USER切换认证方式,且需同步升级旧版客户端驱动。

MySQL 8.4 升级后报 Error 1524 (HY000): Plugin 'mysql_native_password' is not loaded,不是密码错了,是插件根本没加载——必须在启动前配置并重启,运行中无法补救。
my.cnf 必须添加 mysql_native_password=ON
旧版配置里写 default_authentication_plugin=mysql_native_password 在 8.4 中无效,甚至会导致启动失败。唯一生效的写法只有一条:
- 在
my.cnf的[mysqld]段下添加:mysql_native_password=ON - 不能拼错:不是
mysql_native_password_plugin=ON,也不是auth_mysql_native_password=ON - Windows 下是
my.ini,路径常为C:\ProgramData\MySQL\MySQL Server 8.4\my.ini - 加完必须完整重启服务(
systemctl restart mysqld或net stop mysql84 && net start mysql84),reload不起作用
确认插件已激活再改用户认证方式
重启后别急着执行 ALTER USER,先验证插件状态是否为 ACTIVE:
- 登录 MySQL 执行:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'mysql_native_password'; - 若返回
DISABLED或空结果,说明配置未生效或路径/段落写错 - 只有看到
ACTIVE后,才能安全执行:ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'newpass'; - 注意:该语句会重置密码,不是“仅改插件”,生产环境需同步通知应用方
客户端驱动太老会直接握手失败
即使插件启用、用户重置成功,老版本驱动仍可能连不上:
- MySQL Connector/J 5.1、PHP
mysql_connect()(非 mysqli/pdo)、旧版 Navicat/SQLyog 常触发Error 2058 - 错误日志里可能出现
Authentication plugin 'caching_sha2_password' could not be loaded,这是客户端不支持新协议的信号 - 临时解法是启用
mysql_native_password插件(如上);长期必须升级驱动,例如 Connector/J 改用 8.0+ 版本 - Docker 环境尤其容易踩坑:镜像内二进制版本和宿主机挂载的配置/驱动不一致,务必检查容器内
mysql --version和which mysql
别漏掉 XA 事务残留导致启动卡死
升级前没清空 XA 事务,mysqld 启动时会静默 hang 住,错误日志里既无报错也无进度提示:
- 升级前必须执行:
XA RECOVER;—— 如果返回任何记录,说明存在未提交/未回滚的 XA 事务 - 对每条记录执行:
XA ROLLBACK 'xid';(或XA COMMIT,视业务逻辑而定) - 该检查不可跳过,否则升级后服务起不来,排查时容易误判为配置问题
最常被忽略的是:插件启用只是第一步,后续所有用户都得逐个重置认证方式,且旧驱动兼容性必须单独验证——没有“一配就全通”的捷径。


















