mysql的空闲8小时问题

Posted 宇的季节

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的空闲8小时问题相关的知识,希望对你有一定的参考价值。

  在spring中配置数据源时,必须设定destroy-method="close"属性,以便spring容器关闭时,数据源能正常关闭。

  如果数据库时mysql,如果数据源配置不当,则可能发生经典的“8小时问题”。原因是mysql在默认情况下如果发现一个连接的空闲时间超过8小时,会在数据库端自动关闭这个连接。而数据源不知道这个连接已经被数据库关闭,当他将这个“空闲”的连接交给DAO时,DAO就会报无法获取connection的异常。

  如果采用DBCP默认配置,testOnBorrow属性默认值为true,数据源在将连接交给DAO前,会检测这个连接是否是正常的,如果有问题,会再取一个连接,所以不会有8小时问题。如果每次在交给DAO时都检测连接的有效性,则会再高并发时造成性能问题,因为这造成了更多的数据库访问请求。

  另一种方式是:将testOnBorrow设置为false,而将testWhileIdle设置为true,再设置timeBetweenEvictionRunsMillis值。这样,DBCP会通过一个后台线程定时对空闲连接进行检测,当发现无用的空闲连接时,会将他们清除掉。只要将timeBetweenEvictionRunsMillis设置为小于8小时,那些被mysql关闭的空闲连接就可以被清除出去,从而避免“8小时问题”。

  也可以设置mysql本身的interactive-timeout配置参数,更改空闲连接过期时间。在设置timeBetweenEvictionRunsMillis时,需要知道mysql的空闲连接最大过期时间

以上是关于mysql的空闲8小时问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

MySql连接空闲8小时自动断开的原因及连接池配置方法

mysql 5.1超过默认8小时空闲时间解决办法(错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

关于MySql8小时空闲后连接超时问题(testOnBorrow,logAbandoned等)

终止空闲的mysql连接