You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用启动报错:无法加载caching_sha2_password认证插件

解决java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'

这个错误的核心原因很明确:MySQL 8.0及以上版本默认启用了caching_sha2_password认证插件,但你当前使用的mysql-connector-java版本(5.1.42)并不支持这种新的认证机制,再加上Spring Boot 1.5.4.RELEASE是比较老旧的版本,默认依赖的MySQL驱动版本也跟不上MySQL 8.x的要求。

下面给你三种可行的解决方案,按推荐程度排序:

方案一:升级MySQL驱动版本(推荐)

Spring Boot 1.5.x可以兼容更高版本的MySQL驱动,我们可以手动指定支持caching_sha2_password的驱动版本:

子方案1:升级到5.x系列的最新兼容版本

修改你的pom.xml中MySQL驱动依赖,指定版本为5.1.49(这个版本开始支持新认证插件):

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
    <scope>runtime</scope>
</dependency>

这种方式不需要修改太多其他配置,适配性最好。

子方案2:直接升级到8.x系列驱动(适合长期维护)

如果打算长期适配MySQL 8.x,建议直接升级到8.x驱动:

  1. 修改pom.xml的驱动依赖:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
    <scope>runtime</scope>
</dependency>
  1. 更新application.properties中的配置:
    • 调整JDBC URL,添加时区参数(8.x驱动要求):
    spring.datasource.url = jdbc:mysql://127.0.0.1:3306/demo?useSSL=false&serverTimezone=UTC
    
    • 更换Hibernate方言为MySQL 8.x适配版本:
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
    

方案二:修改MySQL用户的认证方式(临时解决)

如果暂时不想升级驱动,可以登录MySQL控制台,将root用户的认证插件改回旧版的mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;

执行完这两句后,你的旧驱动就能正常连接数据库了。不过注意:这种方式安全性较低,不推荐用于生产环境。

方案三:调整JDBC URL参数(部分场景有效)

你的驱动版本(5.1.42)已经支持allowPublicKeyRetrieval参数,可以尝试修改URL:

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/demo?useSSL=false&allowPublicKeyRetrieval=true

这个参数允许驱动从服务器获取公钥来完成认证,但部分环境下可能会有安全风险,仅作为临时备选方案。


内容的提问来源于stack exchange,提问作者bhags

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:34:25