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

MySQLNonTransientConnectionException问题求助:Tomcat应用连接MySQL报错

解决MySQL 8.x与JDBC驱动认证协议不兼容的问题

这个错误的核心原因是:MySQL 8.0默认启用了caching_sha2_password安全认证插件,但你代码里用的是旧版驱动类com.mysql.jdbc.Driver,它不支持这种新的认证协议。结合你使用的是8.0.11版本的Connector,给你两个直接有效的解决方案:

方案一:更新JDBC连接代码(推荐)

MySQL 8.x版本的驱动已经更新了类名和连接规则,你需要做两处调整:

  1. 替换驱动类名:把com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver
  2. 补充JDBC URL的必要参数:添加时区、允许公钥检索等参数,避免额外兼容性问题

修改后的代码如下:

// 加载新版驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
// 补充必要的URL参数
String url = "jdbc:mysql://localhost:3306/pharmacy?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
Connection con = DriverManager.getConnection(url, "pharm", "@Pharm123");

关键参数说明:

  • serverTimezone=UTC:MySQL 8.x强制要求指定时区,否则会抛出时区相关异常
  • allowPublicKeyRetrieval=true:允许客户端从服务器获取公钥,解决caching_sha2_password认证时的密钥获取问题
  • useSSL=false:本地开发环境可关闭SSL,生产环境建议根据需求开启

方案二:修改MySQL用户的认证插件(备选)

如果方案一调整后仍有问题,可以把用户的认证方式切换回旧版的mysql_native_password,这是旧驱动兼容的认证方式:
执行以下SQL命令:

USE pharmacy;
ALTER USER 'pharm'@'localhost' IDENTIFIED WITH mysql_native_password BY '@Pharm123';
FLUSH PRIVILEGES;

额外检查项

  • 确认项目中只引入了MySQL Connector/J 8.0.11版本的jar包,不要同时存在5.x版本的驱动,避免依赖冲突
  • 重启Tomcat服务器,确保所有配置修改生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:10:08