Communications link failure mysql在应用启动后偶发连接断开修复

最近应用在启动一段时间一后,就会偶发Communications link failure错误,偶尔也会报connect refused。

在网上找了一圈,找到比较靠谱的说法:mysql的server端,有自动断连机制,如果一个连接超过time_out的值,就会断开。

而我的应用,使用的是druid线程池,mysql断开时并没有通知线程池连接已断,此时如果用户要查询数据,而正好拿到线程池中已经被mysql单方面断开的连接,就会报上面的错误。

网上已有的解决方案:
1、修改timeout值,治标不治本
2、配置自动连接:autoConnect,可以解决,但限mysql4

还有几种方案,都不可行。我的最终方案:
druid有连接保活机制,我的应用也已经配置了相关参数,但经过排查发现都没有作用,此问题的解决思路如下:
1、保证连接有效
2、保证线程池已经开启了保活机制
3、查看mysql执行日志验证保活是否生效(关键)
4、springboot 相关参数为:

	keepAlive:true
	testWhileIdle:true
    validationQuery: SELECT 1
    timeBetweenEvictionRunsMillis: 6000

5、查看druid源码,如果保活机制默认为ping,修改为select 1.在启动时,jar包方式:
-Ddruid.mysql.usePingMethod=false
单元测试以及ide启动也可能配置此参数。

6、最后,查看linux日志,我们的mysql服务内存过高被kill了…………

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值