MySQLNonTransientConnectionException

2021年11月27日 0 条评论 253 次阅读 0 人点赞

背景

机房迁移后原始机房的Hive、Hadoop、MySQL和Redis等基础设施都开始逐步下线,DBA下线了某个MySQL实例时没有通知下游进而导致画像任务存储Metrics信息时日志抛出MySQL拒绝连接异常:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

库中存储的是指标数据而不是生产数据因此造成的影响并不大,而且被try ... catch以后并不会影响任务本身的运行,只是看着不是很舒服。通过DBA申请了新的集群并在配置文件中应用新的链接,原本以为可以顺利切换但是由于MySQL Java驱动版本问题抛出新的异常:

问题定位

通过Navicat查看当前MySQL集群版本:

结果显示8.0.24,查看Maven工程中引入的驱动版本:

MySQL驱动版本比Server版本低了不少,低版本驱动访问高版本MySQL集群时由于包名变更导致加载驱动失败进而抛出以上异常。

驱动升级

除了将pom中驱动版本升级到8.0.24以外还需要注意一下,MySQL 8.0 以上版本的数据库连接有所不同,需要将com.mysql.jdbc.Driver变更com.mysql.cj.jdbc.Driver驱动才能正常加载。

参考文档

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-api-changes.html

重剑无锋,大巧不工。

文章评论(0)