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驱动:
- 修改
pom.xml的驱动依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <scope>runtime</scope> </dependency>
- 更新
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
相关产品推荐
相关产品推荐

