修复PyCharm连接MySQL 8.0出现的caching_sha2_password认证错误

顾言
顾言
发布时间:2026-11-08 | 3人浏览过
原创

详细讲解在PyCharm中连接MySQL 8.0数据库时遇到caching_sha2_password认证插件报错的根本原因,提供驱动升级配置与服务端降级兼容两套完整实操解决方案与验证方法。

在 PyCharm 的 Database 工具窗口连接 MySQL 8.0 数据库时,控制台经常会抛出 [08001] Could not create connection to database server 或 Authentication plugin 'caching_sha2_password' cannot be loaded 错误。这一问题的本质是 MySQL 8.0 默认将安全认证插件调整为 SHA-256 哈希加内存缓存机制,而客户端驱动版本陈旧或缺少公钥交换配置所致。本文提供两套完整的排查与解决路径:首选推荐的“PyCharm 驱动升级与公钥属性配置”(不改变服务端安全基线),以及备选的“MySQL 服务端密码插件降级回退(针对老旧环境)”,并给出验证指标与避坑指南。
修复PyCharm连接MySQL 8.0出现的caching_sha2_password认证错误
图 0:PyCharm Database Client 与 MySQL 8.0 认证修复架构总览

一、错误表现与产生根源分析

当开发者在 PyCharm 中新建 MySQL 数据源并点击“Test Connection”时,最常见的报错提示如下:

PyCharm 连接失败错误输出示例
DBMS: MySQL (ver. unknown)
Case sensitivity: plain=mixed, delimited=exact
Connection to @localhost failed.
[08001] Could not create connection to database server. Attempted to reconnect 3 times. Giving up.
Caused by: java.sql.SQLException: Authentication plugin 'caching_sha2_password' cannot be loaded,
or: Client does not support authentication protocol requested by server; consider upgrading MySQL client

部分情况下,即使没有弹出插件缺失,也会伴生抛出 java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed。理解这个故障需要梳理 MySQL 在 5.7 与 8.0 两个大版本之间的身份认证协议演变。

在 MySQL 5.7 及更早版本中,默认的用户认证插件为 mysql_native_password。该机制基于 SHA-1 进行双重哈希运算,客户端只需要结合服务端在握手阶段发送的动态盐值(Salt)进行位异或计算,即可完成身份核验,整个交互过程无需传输密码明文或额外交换 RSA 公钥。几乎所有年代的 JDBC 驱动(包括 5.1.x 系列)都天生内置了该算法实现。

从 MySQL 8.0 开始,官方为了抵御碰撞攻击和彩虹表破解,将默认认证插件升级为 caching_sha2_password。该插件采用安全性更高的加盐 SHA-256 算法,并结合服务端内存高速缓存。当缓存未命中(例如首次握手或缓存失效)且未启用 TLS/SSL 加密传输时,客户端必须向服务端请求 RSA 公钥,用公钥加密密码后再回传服务端解密验证。

由此便产生了两个直接断裂点:一是 PyCharm 默认绑定的 JDBC 驱动过旧(例如仍在引用 mysql-connector-java-5.1.x.jar),该版本根本没有编写 caching_sha2_password 插件的 Java 类;二是即使升级到了 8.0 驱动,出于传输安全规范,驱动默认禁止在非 SSL 信道下隐式抓取 RSA 公钥(即 allowPublicKeyRetrieval 默认为 false),从而直接拒绝握手。

修复PyCharm连接MySQL 8.0出现的caching_sha2_password认证错误
图 1:MySQL 5.7 与 MySQL 8.0 握手协议演进及断裂点机理

二、解决方案排查与决策路径

面对该认证报错,工程实践中有两条清晰的解决路线。在动手修改任何配置之前,建议先根据开发环境和权限范围进行决策:

  • 路线 A(客户端修复,强烈推荐):在 PyCharm 中将驱动更新至 MySQL Connector/J 8.0+,并在高级配置中显式开启公钥检索与时区参数。这种做法完全遵循 MySQL 8.0 的安全体系,无需改动任何服务端权限或密码策略,普通开发人员账号即可自主完成。
  • 路线 B(服务端修复,备选应急):登录 MySQL 服务器,使用管理员账号执行 DDL 语句,将该用户的验证插件强行改为传统的 mysql_native_password。这种方式适用于生产环境内存在其他无法升级驱动的老旧遗留系统,但牺牲了 SHA-256 安全防护,且在 MySQL 8.4+ 中已被正式废弃。
修复PyCharm连接MySQL 8.0出现的caching_sha2_password认证错误
图 2:故障分析与修复技术路线决策树

三、方案一:在 PyCharm 中升级驱动并配置连接参数(推荐首选)

这是最标准、最安全的解决方案。操作全程仅在 PyCharm 客户端内完成,步骤明确,具体执行顺序如下:

步骤 1:打开数据源与驱动管理面板

在 PyCharm 右侧边缘工具栏展开 Database 选项卡。点击左上角的 + 图标,依次选择 Data Source → MySQL 进入数据源设置界面。如果此前已经创建过报错的数据源,可以直接右键该数据源并选择 Properties(快捷键 Shift + Enter)。

步骤 2:切换并下载 MySQL Connector/J 8.0+ 驱动

在弹出的“Data Sources and Drivers”窗口左下侧,找到并点击 Drivers 列表下的 MySQL:

  • 查看右侧面板中的 Driver files 区域。如果显示的版本为 5.1.xx,说明驱动陈旧。
  • 点击版本下拉框,切换为 MySQL for 8.0 或最新稳定版驱动(如 8.0.33 及以上)。
  • 点击右侧蓝色的 Download 链接,PyCharm 会自动从 JetBrains 官方存储库下载完整的驱动 Jar 包。
  • 下载完成后,核对 Class 输入框,其全限定类名应自动识别为:
    com.mysql.cj.jdbc.Driver(带有 .cj. 标识)。
离线环境特别提示:若开发机器处于无外网连接的局域网或受限沙箱环境,无法通过点击 Download 自动拉取驱动,可提前下载 mysql-connector-j-8.x.x.jar,在 Driver files 区域点击 + 号,选择 Custom JARs 手动挂载本地文件。

步骤 3:在 Advanced(高级)选项卡中添加关键属性

驱动就绪后,切换回到具体的数据库连接实例。点击顶部的 Advanced(高级)选项卡,在属性列表中核对并设置以下三项核心参数:

参数名称 (Property) 推荐设置值 设置原因与工程作用
allowPublicKeyRetrieval true 关键项:允许客户端向服务端请求 RSA 公钥,以在缓存未命中且未开启 SSL 时完成 SHA-256 口令加密传输。
useSSL false(本地)/ true(生产) 本地或开发环境未配置自签证书时设为 false;云端或生产配合有效 CA 证书时设为 true。
serverTimezone Asia/Shanghai 或 UTC 防止 MySQL 8.0 服务端系统时区无法被 JDBC 准确识别而触发的次级连接异常。

如果希望在连接 URL 中直接定义,也可以在 General 选项卡的 URL 输入框末尾直接附加 Query 参数:

JDBC 连接串拼接示例
jdbc:mysql://localhost:3306/your_database?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC

步骤 4:测试并保存连接

回到 General 选项卡,输入正确的 User 和 Password,点击左下角的 Test Connection。此时控制台将输出绿色提示 Succeeded,显示数据库版本为 MySQL 8.0.x,驱动版本显示为 Connector/J 8.0.x。点击 Apply 和 OK 保存,侧边栏便能正常列出数据库的所有 Schema 与数据表。

修复PyCharm连接MySQL 8.0出现的caching_sha2_password认证错误
图 3:PyCharm Database 面板配置与参数注入四步分解图

四、方案二:在 MySQL 服务端修改用户认证插件(兼容备选)

如果当前开发环境受限于特定条件,无法在 PyCharm 中下载更新驱动,或者有其他使用旧版客户端的程序需要连接同一数据库账号,可以选择在服务端将特定用户的认证方式修改回 mysql_native_password。

权限与前置条件:执行此方案必须拥有 MySQL 实例的 root 或拥有 CREATE USER、SYSTEM_USER 的管理员权限。若您仅是普通只读业务账号,请直接采用方案一。

步骤 1:使用 MySQL 命令行客户端登录服务端

在服务器或本地终端中,通过具有管理员权限的账号登录:

终端 Shell 命令
mysql -u root -p

步骤 2:查看当前用户绑定的认证插件

执行以下 SQL 查询目标用户当前的 plugin 类型:

MySQL SQL 查询
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

在返回的结果集中,可以看到 plugin 列显示为 caching_sha2_password。

步骤 3:修改用户认证插件并重设密码

使用 ALTER USER 语句修改该用户账号的认证算法为 mysql_native_password,同时重新设定该用户的密码:

MySQL SQL 修改命令
-- 将用户 root@localhost 的认证方式修改为 mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourNewPassword123!';

-- 若账号配置为任意主机访问(%),需对应替换 Host:
-- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourNewPassword123!';

-- 刷新权限表确保立即在内存中生效
FLUSH PRIVILEGES;

步骤 4:复核并验证 PyCharm 连接

再次运行 SELECT user, host, plugin FROM mysql.user;,确认 plugin 已经变成 mysql_native_password。此时切回 PyCharm,即使仍然使用默认旧版驱动,再次点击 Test Connection 也可顺利连接。

MySQL 8.4 兼容性预警:MySQL 官方在 8.0.34+ 起已将 mysql_native_password 标记为弃用(Deprecated),并在 MySQL 8.4 LTS 版本中默认彻底禁用了该插件。因此,降级用户插件仅应作为过渡期手段,不应作为长线依赖。

五、连接验证与常见衍生错误排查

完成上述任一修复方案后,在 PyCharm 连接和日常使用中,还可能偶发以下几个关联问题,可依照以下指南快速处置:

1. 衍生时区报错:The server time zone value is unrecognized

连接成功建立后,展开表结构时偶尔会提示 The server time zone value 'SYSTEM' is unrecognized or represents more than one time zone。这是由于 MySQL 8.0 获取到的底层操作系统时区字符串(如 CST)在 Java 驱动中存在歧义。

解决方法:在数据源属性的 Advanced 选项卡中,搜索 serverTimezone,将其显式赋值为具体的地理时区(例如 Asia/Shanghai)或者标准世界时 UTC,重新连接即可彻底解决。

2. 参数已添加但依旧提示 Public Key Retrieval is not allowed

如果已经在 Advanced 中配置了 allowPublicKeyRetrieval=true,测试连接仍偶发报同样的错误,通常是由于 PyCharm 驱动缓存未刷新或参数被数据源 URL 覆盖。

排查手段:

  1. 检查 General 选项卡的 URL,若当前为手动自定义 URL 模式,检查末尾是否遗漏了 allowPublicKeyRetrieval=true。URL 中的显式串优先级高于下方表格。
  2. 右键数据源选择 Diagnostic & Tools → Forget Cached Schemas,清理本地元数据缓存。
  3. 彻底重启一次 PyCharm,使新载入的驱动类加载器重新初始化。

3. Docker 容器或远程云主机访问拒绝(Host is not allowed to connect)

若报错代码转变为 [HY000][1130] Host 'xxx' is not allowed to connect to this MySQL server,说明已通过认证插件阶段,但 MySQL 限制了账号的允许登录 IP。

解决方法:在服务端执行 ALTER USER 'root'@'%' IDENTIFIED BY '...'; 将允许的主机网段由 localhost 扩展为包含客户端 IP 的地址段或 %,并注意核实服务器防火墙与 3306 端口放行规则。

修复PyCharm连接MySQL 8.0出现的caching_sha2_password认证错误
图 4:方案综合比对与上线验收检查矩阵 (Checklist)

六、全文总结

PyCharm 连接 MySQL 8.0 报出 caching_sha2_password 错误的根本逻辑,是数据库现代密码学标准升级与本地旧驱动协议实现脱节所致。最佳实践始终是在客户端跟进升级 Connector/J 8.0+ 驱动 并补充 allowPublicKeyRetrieval=true 参数,这既保证了 SHA-256 加盐认证的高安全防护等级,也完全避免了侵入服务端配置。在不可抗拒的旧系统限制下,可通过 ALTER USER ... IDENTIFIED WITH mysql_native_password 应急平替,但需注意在 MySQL 新版本迭代中及时完成向现代认证机制的平滑迁移。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表