应用连接MySQL时出现Authentication plugin caching_sha2_password cannot be loaded,密码可能没有输错。常见原因是客户端库或驱动无法加载服务器为该账户指定的SHA-2认证插件。
先确认失败发生在客户端还是服务器,再决定升级哪一端。

这个错误位于认证链路哪一层
caching_sha2_password包含服务器端与客户端端实现。服务器端插件内置于MySQL,账户记录决定使用哪种认证方式;连接端仍需具备对应客户端插件。错误文本若明确写着cannot be loaded并带出本地插件路径,通常优先检查客户端安装、连接器版本与动态库来源。
服务器支持该插件,不代表旧客户端也能使用它。
核对账户插件和客户端版本
在可用的管理连接中执行SELECT user,host,plugin FROM mysql.user WHERE user='用户名';,确认命中的账户及插件。连接端运行mysql --version,应用还要记录实际加载的驱动版本,避免系统命令行客户端与应用容器使用不同库。
不要只核对用户名。MySQL账户由用户与Host共同匹配,同名账户可能采用不同认证插件。
优先升级客户端并使用安全传输
官方说明MySQL 5.7.23起的客户端库已加入caching_sha2_password支持,MySQL 8.0及兼容的新驱动通常可直接使用。升级后优先通过TLS连接,例如命令行使用--ssl-mode=REQUIRED。无法使用TLS的受控环境才考虑RSA密码交换,命令行可使用受信任的--server-public-key-path,或在明确网络边界后使用--get-server-public-key。
获取服务器公钥不能替代服务器身份验证,生产环境应优先使用可验证的TLS。
为什么不应直接改回旧插件
MySQL 8.0把caching_sha2_password作为默认认证方式;mysql_native_password从8.0.34开始弃用,在8.4默认禁用,并在9.0移除。为了兼容一个旧客户端而长期降级账户,会把问题延后到下一次升级。
如果必须临时变更账户,应先确认服务器版本支持目标插件、评估现有连接,再使用ALTER USER在维护窗口处理。更安全的长期方案是升级连接器并保留SHA-2认证。
修复后的验证清单
用应用实际驱动重新连接,确认TLS状态、命中的Host账户和认证插件,再完成一次最小只读查询。可在萤光云或LightNode的隔离VPS复现客户端版本。验收标准是无需旧插件降级即可连接、传输受保护、账户权限不扩大且应用重启后仍能认证。
FAQ
问:Public Key Retrieval is not allowed和插件无法加载是同一个错误吗?答:不是。前者通常表示客户端支持插件但不允许获取RSA公钥,后者更常见于客户端插件或驱动缺失。
问:只更新mysql命令行工具就够了吗?答:不一定。应用可能使用独立的语言驱动或容器镜像,必须升级真正发起连接的组件。
温馨提示
温馨提示:认证改动前导出账户定义并准备独立管理员连接。不要把数据库密码、私钥或公钥文件路径写入公开日志和命令历史。


