升级MySQL驱动需匹配JDBC、JDK、MySQL服务端三版本,替换为mysql-connector-j 8.3.0+,更新驱动类名为com.mysql.cj.jdbc.Driver,调整URL参数如serverTimezone、allowPublicKeyRetrieval等,并排查认证、SSL及时区等典型问题。

升级 MySQL 驱动并做好连接兼容处理,核心是匹配 JDBC 驱动版本、JDK 版本、MySQL 服务端版本三者关系,同时调整连接参数避免因协议变更或废弃特性导致的连接失败或异常行为。
确认当前环境与目标版本兼容性
不同 MySQL JDBC 驱动(mysql-connector-java 或新版 mysql-connector-j)支持的最低 JDK 和 MySQL 版本不同:
- mysql-connector-java 8.0.x 要求 JDK 8+,支持 MySQL 5.7/8.0;默认启用新认证插件
caching_sha2_password - mysql-connector-j 8.3+(2023 年起替代旧名)进一步强化对 MySQL 8.4 的支持,并默认禁用不安全的 SSL 行为
- 若服务端仍是 MySQL 5.6 或更低,建议用 5.1.49 及以下版本驱动;若已升级到 MySQL 8.0+,务必避免使用 5.x 驱动(不支持新认证方式)
升级驱动并替换依赖
以 Maven 项目为例,替换旧依赖:
- 移除类似
的配置mysql-connector-java 5.1.48 - 添加新版(如 8.3.0):
mysql
mysql-connector-j
8.3.0 - 注意:8.0.23+ 开始,驱动类名从
com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver,代码中若显式调用Class.forName()需同步更新
调整连接 URL 与关键参数
新版驱动对连接参数更严格,常见需补充或修正的参数有:
- useSSL=false(开发环境可临时加,生产必须配合法 SSL)
-
serverTimezone=UTC(避免时区解析异常,推荐设为服务端实际时区如
Asia/Shanghai) -
allowPublicKeyRetrieval=true(仅当 MySQL 8.0+ 使用
caching_sha2_password且未配 SSL 时需要) - characterEncoding=utf8 与 useUnicode=true 组合确保中文不乱码
- 示例完整 URL:
jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&characterEncoding=utf8&useUnicode=true
验证连接与排查典型问题
升级后常见报错及应对方式:
-
“Public Key Retrieval is not allowed” → 加
allowPublicKeyRetrieval=true,或改用安全方式配置用户密码(如重置为mysql_native_password认证) -
“Unknown system variable 'query_cache_size'” → MySQL 8.0 已移除查询缓存,驱动 8.0+ 默认尝试读取该变量;可在 URL 中加
cacheServerConfiguration=false -
“Connection reset” / SSL handshake failed → 检查是否误启用了 SSL(新版驱动默认尝试 SSL),加
useSSL=false测试,再按需配置可信证书 - 应用启动时提示驱动类找不到 → 确认 classpath 中无多个冲突版本(尤其 Tomcat lib 或旧 war 包残留)











