数据库连接超时问题解决

今天上班在产线上遇到了这么一个bug
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
数据库连接超时是指当服务连接到数据库但不对其做任何操作时等待到一定时间之后,这个链接就会与数据库断开,当再次对数据库进行操作时会报数据库连接超时或者连接关闭异常。mysql的连接默认最长等待时间为28800s也就是8个小时。
根据实施反应在出现这个异常之后的时间里服务是正常的但是对DB的查询无法正常执行
问题排查
1.先检查DB的连接配置 公司用的是mybaits 这里根据自身实际情况再进行排查
查看mysql连接最大超时时间
show global variables like '%timeout%';
发现产线上的wait_timeout为1800s 也就是30min 这里开始怀疑是不是事务的执行超过了30min 但是还没有有力证据证明
2.紧接着根据日志排查发现出事情的那天相关任务的执行耗时超过了30min 在线上拿到以往没出事情的日志来看任务的执行时间都是少于30min 也就证实了上述猜想是对的 正常是把wait_timeou参数调大一点就行了
跟组长讨论了以往的情况 了解到以前也出现过类似情况 而解决方法也正如我上述所述
修改完参数大小之后重启服务 之后根据实施反馈上述问题再也没出现过
一般情况下 等待超时timeout为 28800s 也就是8小时 事务的执行完成 一般都是在这个时间段内
注意点:
1.一般情况下谨慎修改产线程参数
2.wait_timeout 和interactive_time需要同时修改才能生效