MyBatis连接MySQL 8.0 故障的探索和思考
前言
关于连接方式,这篇写的足够详细了https://zhuanlan.zhihu.com/p/48030404
关于故障 CLIENT_PLUGIN_AUTH is required,的确是对于低版本的数据库比如5.1或5.0使用了高版本的jre,
对于同类型类似的故障我推荐这个解决方案,降低jre版本:
https://blog.csdn.net/qq_25693315/article/details/87983711
但是,我期望连接的数据库为8.0,并且使用Navicat连接数据库测试成功,密码、账号、URL等正常配置均正确,但是却报了这样的错误。
最终经过一段时间的探索,成功解决了问题。
导致发生这个故障的根本原因在于,我本地有多个数据库,其中有2个数据库服务都使用了3306端口(端口冲突),其中一个是低版本的数据库5.0,另一个是高版本的数据库8.0。
发现和解决错误的方式是通过任务管理器去重启数据库服务时发现多个服务,停用了冲突的服务后故障解除。
本次的故障难以解决核心原因在于环境故障,这类故障位于思维盲区,并且用Navicat连接成功掩盖了环境问题,所以导致无法察觉。
我认为本次我探索发现这个故障时所经历的思考有启发意义所以整理博客发布。
探索经过
代码内环境和数据库版本
- 数据库部署的环境为8.0.13
- Maven部署的jre版本为8.0.13
- JDBC连接库为db.driver=com.mysql.cj.jdbc.Driver
第一阶段
首先观察错误:
Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (CLIENT_PLUGIN_AUTH is required)
理解意思为:数据库连接失败,需要提供身份验证
观察其他人员的解决方案,有很大一部分人员提供的方案是发现自身数据库等级为5.xx.xx版本,要求降低Maven部署的jre和更换JDBC连接库。
当我实际使用该方案后,出现的错误为,无法使用127.0.0.1进行数据库连接。对此我做出推测,对于版本5