Mysql数据库默认配置下,如果闲置超过8小时,连接会自动断开,此时如果应用系统采用连接池,会造成连接池中的连接无效,访问时会抛出异常。

解决这个问题主要有三种方法:

1、修改MySQL配置参数

增加参数interactive_timeout及wait_timeout,同一时间,这两个参数只有一个起作用。到底是哪个参数起作用,和用户连接时指定的连接参数相关,缺省情况下是使用wait_timeout。建议是将这两个参数都修改,以免引起不必要的麻烦。

这两个参数默认值是8小时(60*60*8=28800),将其设置28800000,注意该值不能无限大,不支持为永久。

linux下打开/etc/my.cnf,在属性组mysqld下面添加参数如下:

[mysqld]

interactive_timeout=28800000

wait_timeout=28800000

windows下打开my.ini,增加:

interactive_timeout=28800000

wait_timeout=28800000

2、修改JDBC参数

修改对应的JDBC连接URL,形如:

jdbc:mysql://hostaddress:3306/charisma?autoReconnect=true

即添加 autoReconnect=true这个参数,即能解决这个问题。该方法对于mysql5.0以上无效,只适用于4.x。

3、修改业务系统连接池参数配置

通过设定连接最大空闲时间来解决问题,每种连接池的参数配置不太一样,如c3p0的参数为maxIdleTime,只要设定值小于mysql中的wait_timeout(或interactive_timeout)值即可。

华丹快速开发平台WEB报表平台的早期版本(2.59.50以前),对于内置的c3p0连接池没有设定maxIdleTime参数,需要通过前两种方法实现,从2.59.60后已添加该参数,客户无需做任何特别设置。