Communications link failure,The last packet successfully received from the serve

  关于MySQL连接超时问题,估计很多人都遇到过:大致情形都是这样,开发测试时程序都是正常的,一到第二天就出先莫名错误,比如在我的项目中使用了多数据源,其中有一个数据源仅仅供查询使用,所以使用次数很少。当出现了超时错误,一般错误日志如下:
Communications link failure

The last packet successfully received from the server was 510,815 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.

 

        具体解释是这样的:MySQL服务器默认的“wait_timeout”是8小时【也就是默认的值默认是28800秒】,也就是说一个connection空闲超过8个小时,mysql将自动断开该connection,通俗的讲就是一个连接在8小时内没有活动,就会自动断开该连接。而应用连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

       wait timeout的值可以设定,但最多只能是2147483,不能再大了。也就是约24.85天
所以即使你MySQL通过my.ini 在
# The TCP/IP Port the MySQL Server will listen on
port=3306下面添加
# this is myown dinifition for mysql connection timeout
wait_timeout=31536000
interactive_timeout=31536000
无论超过最大限度多大的数值,只能被MySQL解析为2147483

 

解决方案:

1、按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true&failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。

 

2、增大mysql的wait_timeout属性值;(起不到实质性作用)

show variables like '%timeout';


3、最好的解决方法,如果使用了c3p0连接池,可以配置idleConnectionTestPeriod 属性,每多少秒检查所有连接池中的空闲连接,把该值设置的小于mysql的wait_timeout值即可。

 

http://blog.csdn.net/liuxiao723846/article/details/45534885

猜你喜欢

转载自m635674608.iteye.com/blog/2391424
今日推荐