Druid Causedby:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

使用Druid出现Causedby:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


)

一、Druid连接池配置问题

代码片.

# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 
testWhileIdle: true

二、DB的wait_timeout设置(主要原因)

wait_timeout巨坑,连接池在一开始获取连接的时候例如初始化连接是5个,在数据库原有的连接还有,连接池会记录这个个连接是可用的,但是你自己的数据库检测连接默认是60秒进行检测,等你在执行任务的时候,这个连接在你使用的上一毫秒失效了,mysql自动断开连接,你再使用这个连接运行SQL的时候就抛出了上面的异常,获取连接超时:

  1. MySQL连接超时相关的两个参数interactive_timeout和wait_timeout的区别和解释;
    interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。
    说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。
    interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)
    wait_timeout:非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等
  2. global级别的wait_timeout28800秒 ;

mysql> show global variables like ‘wait_timeout’;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| wait_timeout | 28800 |
±--------------±------+
1 row in set (0.00 sec)

  1. session级别的wait_timeout 28800秒 ;

mysql> show session variables like ‘%wait%’;
±-------------------------±---------+
| Variable_name | Value |
±-------------------------±---------+
| innodb_lock_wait_timeout | 50 |
| innodb_spin_wait_delay | 6 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
±-------------------------±---------+
4 rows in set (0.00 sec)

总结

问题排查思路,从项目–>连接池版本–>java mysql驱动版本–>连接池配置–>服务器–>数据库wait_timeout的配置

问题没有确定的参数,需要结合自己的配置,以及项目需求进行调配

借鉴文章

  1. 参考链接
  2. 参考链接
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值