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后已添加该参数,客户无需做任何特别设置。