Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zhangjian-txj opened this issue Dec 18, 2021 · 1 comment
Open

Comments

@zhangjian-txj
Copy link

应用版本: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
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant