MySQL 8.4默认不加载mysql_native_password插件,导致ALTER USER报错ERROR 1524;需先在my.cnf中添加mysql_native_password=ON并重启服务启用插件,再执行ALTER USER和FLUSH PRIVILEGES切换用户认证方式。

MySQL 8.4 中 mysql_native_password 插件默认不加载,不是配置错了,也不是密码问题,是服务端压根没注册这个插件——直接执行 ALTER USER ... IDENTIFIED WITH mysql_native_password 必然报 ERROR 1524 (HY000)。
为什么 ALTER USER 报错 “Plugin 'mysql_native_password' is not loaded”
这不是客户端或密码的问题,而是 MySQL 8.4 启动时根本没加载该插件。即使你没在配置里禁用它,它也处于未注册状态。执行认证方式变更操作前,服务端必须先“认识”这个插件。
-
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'mysql_native_password';返回空结果,就确认未加载 - 旧版 mysqldump 导入的用户带
plugin='mysql_native_password'字段,但服务端不认识,登录直接拒 - 错误信息末尾常附带
Authentication plugin 'mysql_native_password' cannot be loaded,这是关键线索
如何永久启用 mysql_native_password 插件(推荐)
修改配置文件后重启,是最稳定、可复现的方式。注意写法和位置必须准确。
- 编辑
/etc/my.cnf(Linux/macOS)或C:\ProgramData\MySQL\MySQL Server 8.4\my.ini(Windows) - 在
[mysqld]段末尾添加一行:mysql_native_password=ON(不是default_authentication_plugin,后者会导致启动失败) - 保存后执行
systemctl restart mysqld(Linux)或net stop mysql84 && net start mysql84(Windows) - 重启后再次查
INFORMATION_SCHEMA.PLUGINS,应看到ACTIVE状态
如何为用户切换认证插件并避免断连
插件启用后才能改用户,但不能无差别硬切 'root'@'%' —— 这会切断远程管理链路。
- 优先锁定本地:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPass2026!'; - 远程应用账号单独建:
CREATE USER 'appuser'@'192.168.10.%' IDENTIFIED WITH mysql_native_password BY 'pass123'; - 切忌用旧语法
GRANT ... IDENTIFIED BY,MySQL 8.4 已废弃该写法,会报ERROR 1064 - 每次修改后必须执行
FLUSH PRIVILEGES;,否则新plugin值不生效
客户端连不上?先确认它实际协商的是哪个插件
Navicat 15 以下、PyMySQL mysql_native_password,它们不会自动降级或协商 caching_sha2_password。
- 连接失败时,不要只改服务器配置,先看客户端日志是否出现
Authentication plugin 'caching_sha2_password' is not supported - 若无法升级客户端,就只能启用
mysql_native_password插件 + 单独建兼容账号 - 若可升级客户端,长期更推荐把用户迁移到
caching_sha2_password:ALTER USER 'u'@'h' IDENTIFIED WITH caching_sha2_password BY 'plain_password'; - 注意:不能对
authentication_string字段手动 UPDATE,哈希必须由插件内部生成
最易被忽略的一点:插件启用和用户修改是两个独立步骤,缺一不可;且 FLUSH PRIVILEGES 不是可选操作,它是让权限表变更真正生效的必要动作。











