必须先确认服务端是否真正加载插件:执行show plugins;检查mysql_native_password和caching_sha2_password的status是否为active;若为disabled,需在my.cnf中[mysqld]段添加对应插件启用配置并重启mysql,仅alter user无效。

检查 MySQL 服务器端是否真正加载了指定认证插件
错误提示中出现的 caching_sha2_password 或 mysql_native_password 看似是客户端问题,但根源常在服务端——插件根本没被 MySQL 加载进来。不能只改用户 plugin 字段,得先确认插件文件存在且状态为 ACTIVE。
登录 MySQL 后执行:
SHOW PLUGINS;
重点看 mysql_native_password 和 caching_sha2_password 两行的 Status 列。如果显示 DISABLED,说明插件未激活,ALTER USER 强制指定也无效。
- 插件路径通常在
plugin_dir下(可用SELECT @@plugin_dir;查看),Linux 常见为/usr/lib64/mysql/plugin/,Windows 为C:\Program Files\MySQL\MySQL Server 8.x\lib\plugin\ - 对应文件名一般是
auth_socket.so、caching_sha2_password.so、mysql_native_password.so—— 缺少任一.so或.dll文件,就会报 “cannot be loaded” - 若文件存在但状态仍是
DISABLED,需在my.cnf的[mysqld]段显式启用:mysql_native_password=ON或caching_sha2_password=ON(注意不是default_authentication_plugin) - 修改后必须重启 MySQL 服务,
FLUSH PRIVILEGES不生效
为什么 SHOW PLUGINS 显示 ACTIVE,但连接仍失败?
插件状态正常 ≠ 客户端能用。关键在于客户端驱动是否支持该插件的底层调用接口。比如 caching_sha2_password 依赖 OpenSSL 1.1.1+ 的 EVP_PKEY_CTX,而 Navicat v12 内嵌的是 OpenSSL 1.0.2,dlopen 就会失败并静默退出,不报 OpenSSL 版本错,只报插件无法加载。
常见组合陷阱:
-
caching_sha2_password+ Navicat ≤ v12 → 必现错误,升级到 v15.0.24+ 才修复 -
mysql_native_password+ RMySQL(旧版)或某些 JDBC 驱动(如 mysql-connector-java libmysqlclient 中的对应符号 -
auth_socket插件在远程连接时直接拒绝,但错误信息仍可能混淆成 “cannot be loaded”
如何验证客户端是否真能加载插件?
绕过 GUI 工具,用命令行工具直连是最准的诊断方式。它能暴露真实错误来源:
- Linux/macOS 下用
mysql --version确认客户端版本,再执行:mysql -u root -p -h 127.0.0.1 --default-auth=mysql_native_password
加--default-auth强制指定插件,比改用户更直接 - 若报错
ERROR 2059 (HY000): Authentication plugin 'xxx' cannot be loaded,且服务端SHOW PLUGINS确认插件已ACTIVE,那基本锁定是客户端环境问题:缺少 .so/.dll、OpenSSL 版本不匹配、或驱动编译时未启用对应 auth 支持 - Windows 下可使用
Process Monitor追踪 mysql.exe 是否尝试加载mysql_native_password.dll并失败于 “NAME NOT FOUND” 或 “PATH NOT FOUND”
插件文件损坏或权限错误的实际表现
插件文件存在,但权限不对或被杀毒软件拦截,也会触发相同错误。尤其 Windows 上,mysql_native_password.dll 若被标记为“来自互联网”,系统可能阻止加载。
- Linux 下检查:
ls -l $(mysql --help | grep "plugin" | awk '{print $NF}')/mysql_native_password.so,确保属主为mysql:mysql且有执行权限(-rwxr-xr-x) - Windows 下右键 DLL → “属性” → 底部勾选 “解除锁定”,再重启 mysqld
- SELinux 启用时,
setsebool -P mysqld_can_network_connect_db 1可能必要,否则插件加载阶段因策略拒绝访问网络资源而中断 - 不要手动复制其他 MySQL 实例的插件文件 —— ABI 不兼容会导致 mysqld 启动失败或崩溃,错误日志里会出现
undefined symbol











