日期:2014-05-16  浏览次数:20384 次

autoReconnect及查看和连接时间有关的系统变量与通常产生的异常

MySQL官方不推荐使用autoReconnect=true,参见http://bugs.mysql.com/bug.php?id=5020

(注意这里说的版本是3.0.14-production)
需要另外找别的办法来解决超过8小时,链接断开的问题。

?

由于问题产生的根本原因在于服务到数据库的连接长时间没活动,既然重新连接的办法无效,就可以尝试另外一种办法,就是反空闲。
自己写一个线程来反空闲的话,比较麻烦。
最后在网上找到一个办法。为hibernate配置连接池,推荐用c3p0,然后配置c3p0的反空闲设置idle_test_period,只要小于MySQL的wait?timeout即可

?

当然其他的类似能够实现反空闲的连接池配置也是一样的可以的

<!--EndFragment-->。

?

?

?

?


?

要修改就只能在配置文件里修改。

Windows下在%MySQL?HOME%/bin下有mysql.ini配置文件

Linux系统下的配置文件为/etc/my.cnf。

其中wait_timeout就是负责超时控制的变量,其时间为长度为28800s,就是8个小时,那么就是说MySQL的服务会在操作间隔8小时后断开,需要再次重连。

也有用户在URL中使用jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true来使得连接自动恢复,当然了,这是可以的,不过是MySQL4及其以下版本适用。MySQL5中已经无效了,必须调整系统变量来控制了。

?

MySQL5手册中对两个变量有如下的说明:?

??interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。