MySQL 8 连接报错:Public Key Retrieval is not allowed

错误日志

复制代码
2025-11-17 10:11:08 ERROR 21740 --- [论坛系统] [eate-1546318093] com.alibaba.druid.pool.DruidDataSource   : 
create connection SQLException, url: jdbc:mysql://localhost:3306/forum_db?useSSL=false&serverTimezone=UTC, 
errorCode 0, state 08001

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

问题描述

Spring Boot 在启动项目时,数据库连接池(Druid)无法创建 MySQL 连接,抛出:

复制代码
Public Key Retrieval is not allowed

出现原因

MySQL 8 默认用户认证方式为 caching_sha2_password

当客户端(JDBC)尝试连接数据库时,需要从服务器获取 RSA 公钥。如果 MySQL 未允许客户端获取公钥,就会报:

复制代码
Public Key Retrieval is not allowed

Spring Boot + MySQL 8 在未加入某些参数时就会发生此问题。

解决方法(推荐)

application.yml 的数据源 URL 中加入:

复制代码
allowPublicKeyRetrieval=true

✔ 正确配置示例:

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/forum_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    username: root
    password: 密码

可选解决方案(不推荐)

将 MySQL 用户认证方式改成旧版本的 mysql_native_password

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

不推荐用此方式,因为安全性较低。


最终结论

这是 MySQL 8 的认证机制导致的连接问题,通过在 JDBC URL 中加入:

复制代码
allowPublicKeyRetrieval=true

即可解决,属于常见的 MySQL 8 JDBC 连接参数问题。


相关推荐
q***82912 小时前
MySQL--》如何通过选择合适的存储引擎提高查询效率?
数据库·mysql·adb
q***96582 小时前
MySql-9.1.0安装详细教程(保姆级)
数据库·mysql
2501_941111402 小时前
使用Scrapy框架构建分布式爬虫
jvm·数据库·python
倔强的石头_2 小时前
电科金仓在医院怎么用?从迁移到跑稳,聊点实在的
数据库
i***68322 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
z***75153 小时前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
麦兜*3 小时前
Redis内存消耗异常飙升?深入排查与Big Key/Hot Key的根治方案
jvm·数据库·spring boot·redis·spring·缓存
成为你的宁宁3 小时前
【Redis 从入门到实战:详细讲解 Redis 安装配置、RDB/AOF 数据持久化方案、一主两从同步部署,深入剖析哨兵模式工作原理与哨兵模式高可用全攻略】
数据库·redis·缓存
云和数据.ChenGuang3 小时前
r=re.search(r‘data-original=“(.*?)“‘, line)指令解析
数据库·mysql·r语言