Mycat-download icon indicating copy to clipboard operation
Mycat-download copied to clipboard

springboot应用频繁重启,无法初始化数据库链接。

Open zhangjian-txj opened this issue 3 years ago • 1 comments

应用版本:springboot 2.3.4 , 数据库连接池(connection pool):Hikaricp mycat版本:1.6.7.6 环境:k8s 1.8 database:mysql 8.0.20 现象:应用在k8s环境正常运行,应用莫名的频繁重启,导致业务应用无法正常使用。 日志分析: 1) 通过k8s查看应用pod频繁重启,通过查看在应用pod重启期间的日志,在初始化数据库连接池时,应用日志显示Communications link failure,并频繁在控制台中打出以下信息: The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 并在一分钟左右时间应用重新启动,

2)通过查看mysql日志,并查看当前数据库连接的使用情况,并未发现存在大量客户端连接的情况,mysql日志未发现有任何异常

3)查看mycat日志,发现在应用在发生频繁重启前,有以下两种错误: 1. jdbcHeartBase Error java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed 2. io.mycat.backend.mysql.PreparedStatement.constructColumns(PreparedStatement.java:99) -- can not get column count java.lang.Exception: unsupport * in select * from ........ 4)在通过查找mysql ,mycat日志未找到导致应用频繁重启的原因后,将mycat服务重新启动,应用恢复正常。

有如下几个疑问: 1)jdbcHeartBase Error的错误,是由于mycat高可用的心跳检测机制无法探测mysql主节点的服务导致? 此时如果检测到mysql的主服务不可用,是否mycat内部自动会尝试主从切换?可能由于主从切换一直不成功导致应用错误,导致应用一直重新启动,但启动初始化数据库连接池又不能成功,导致进入一个死循环? 2) mycat不支持select * from ......这样的SQL写法? 导致了第2个问题在日志中频繁出现,但这不应该是导致应用频繁重启的原因,这不是致命的错误。但还是仍然想问一下类似 select * from 。。。。这样的查询语句从mycat而言是否支持? 微信图片_20211218165145 微信图片_20211218165203 微信图片_20211218165145 微信图片_20211218165203 微信图片_20211218165208 微信图片_20211218165212

zhangjian-txj avatar Dec 18 '21 08:12 zhangjian-txj

通过模拟锁定数据库的某一张表(lock table ***)的方式,问题再现。为什么锁表,会导致应用无法通过mycat连接数据库?这是不是mycat的缺陷?

zhangjian-txj avatar Dec 22 '21 13:12 zhangjian-txj