错误根源是客户端不支持mysql 8.0默认的caching_sha2_password认证插件,而非服务端配置损坏;旧版navicat≤12、rmysql≤1.0等驱动缺乏对应解析逻辑,导致握手阶段加载失败。

这不是 MySQL 服务本身启动失败,而是客户端在连接握手阶段无法识别或加载服务端声明的认证插件——错误根源几乎总在客户端兼容性,而非服务端配置损坏。
为什么 caching_sha2_password 会报 “cannot be loaded”
MySQL 8.0+ 默认用 caching_sha2_password 做用户认证,但它依赖客户端库内置对应解析逻辑。旧版驱动(如 Navicat ≤ v12、RMySQL ≤ 1.0、mysql-connector-java
- 错误信息里出现
caching_sha2_password,基本等于“客户端太老”,不是插件没装好 -
mysql_native_password报同样错误?那说明该插件被禁用或路径不对(见下一条) - 错误发生在
mysql -u root -p命令行时,大概率是本地 mysql 客户端版本太低(mysql --version查一下)
mysql_native_password 也报 cannot be loaded 怎么办
这属于更底层的问题:插件文件存在但 MySQL 进程没加载它,或客户端找不到符号。常见于 Windows 环境或精简版安装包。
- 先执行
SHOW PLUGINS LIKE 'mysql_native_password';,如果状态是DISABLED,说明插件没启用 - 检查
my.cnf或my.ini的[mysqld]段是否含plugin-load=mysql_native_password.so(Linux/macOS)或plugin-load=mysql_native_password.dll(Windows) - Windows 下若提示“找不到指定模块”,可能是
libmysql.dll版本混用,Navicat 自带的 dll 和 MySQL 服务端不匹配 - 不要手动下载第三方
caching_sha2_password.dll放进 Navicat 目录——无签名、易冲突、可能触发安全拦截
绕过 GUI 工具直连验证真实问题
Navicat、DBeaver 等工具报错时,先用命令行排除干扰:
- Linux/macOS:
mysql -u root -p -h 127.0.0.1 --default-auth=mysql_native_password - Windows:
mysql.exe -u root -p -h 127.0.0.1 --default-auth=mysql_native_password - 如果命令行也失败,且错误一致 → 确认是服务端插件未启用或客户端版本问题
- 如果命令行成功,但 Navicat 失败 → 锁定为 Navicat 版本或连接配置问题(比如勾了“使用 SSH 隧道”却没配对)
真正麻烦的不是改插件,而是改完后忘记重置用户 host 匹配规则——root@localhost 和 root@127.0.0.1 是两个不同用户,ALTER USER 只改其中一个,另一条连接线依然报错。











