Last modified:2013-10-08 14:16:47mysql
**********************************************web
web网站使用MySQL数据库,今天忽然报如下错误:sql
Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was *** millisecond ago。数据库
缘由:服务器
Mysql服务器默认的“wait_timeout”是8小时(也就是默认的值默认是28800秒),也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection,通俗的讲就是一个链接在8小时内没有活动,就会自动断开该链接。而链接池却认为该链接仍是有效的(由于并未校验链接的有效性),当应用申请使用该链接时,就会致使上面的报错。网站
wait timeout的值能够设定,但最多只能是2147483,不能再大了。也就是约24.85天。this
修改方法:MySQL经过my.ini 在spa
# 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.net
以上是在网上找到的解决方法,可是通常链接的有效时间不用修改,后来分析了如下问题,发现是因为数据库链接池的一句配置引起的:server
<!-- 最大空闲时间,60秒内未使用则链接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="0"></property>
因为mysql的链接空闲超过8个小时,因此就关闭了,可是链接池却永不丢弃链接,认为该链接仍是有效的(由于并未校验链接的有效性),当应用申请使用该链接时,就会致使上面的报错。
解决方法将value设置为20。