解决mysql Communications link failure异常

  • 介绍

异常信息:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 5,030 milliseconds ago.  The last packet sent successfully to the server was 28 milliseconds ago.

一、出现的问题

我的web工程在隔夜连接mysql数据库,会出现错误如下(截取了关键字),需要重启服务器才能ok。

异常信息:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 5,030 milliseconds ago.  The last packet sent successfully to the server was 28 milliseconds ago.

二、我的工程环境

springMVC4+Mybatis3ORM框架+Mysql5.5数据库+druid连接池

三、原因分析

1、你可通过在mysql 中输入下行代码,查询mysql的参数。

mysql﹥

mysql﹥ show global variables like ‘wait_timeout’;

+—————+———+

| Variable_name | Value |

+—————+———+

| wait_timeout | 28800 |

+—————+———+

1 row in set (0.00 sec)

这是由于mysql 服务器默认wait_timeout为28800s,合计8小时。如果8小时后链接还处于sleep状态,mysql将自动将连接断掉。而web工程中默认的连接池用此连接在进行连接将出现错误。

说明项目中的连接池配置中的timeout配置时间大于数据库wait_timeout而导致,

 

四、解决措施

目前笔者了解3种解决方法:

1、更改mysql的wait_timeout时间(不推荐)

可用set global wait_timeout=XXX;单位为秒,但是最大貌似只能为24天,同时太大会带来诸多弊端。

2、连接属性设置autoReconnect=true(不推荐)

设置过后,就像其他人一样,java的mysql驱动是不行的。autoReconnect 和autoReconnectForPool 都不行,四处查询了下。这个参数不适用java的mysql驱动。

3、修改druid连接池参数设置(推荐)

  • 参考

本文为原创,如果您当前访问的域名不是surenpi.com,请访问“素人派”。

发表评论

电子邮件地址不会被公开。 必填项已用*标注