MYSQL 8小时超时问题

时间:2009-05-05 10:47:31

标签: mysql

我使用的是MYSQL 5.0和Tomcat 5.5。 8小时后,MYSQL默认关闭所有空闲连接,所以我得到一个SQL异常。解决这个问题

5 个答案:

答案 0 :(得分:6)

您使用的是哪个连接池?大多数允许定期执行心跳命令以防止连接空闲。

编辑:看DBCP configuration page,我认为你应该设置一个合适的(便宜的)validationQuery。然后,您可以告诉DBCP在可能驱逐空闲连接(testWhileIdle)时对其进行测试,或者在返回连接(testOnBorrow)之前告诉它进行测试。第一个(希望!)保持你的空闲连接活着;第二个不会,但不会返回断开的连接(即如果有必要会创建一个新连接)。

答案 1 :(得分:2)

你的意思是你在空闲时保持连接活着吗?我不是mySql的专家,但在数据库中我一直在使用它被认为是良好的做法,只在需要时保持连接打开,然后关闭它。

答案 2 :(得分:1)

我不知道如何增加超时但我想应该有一个设置..为什么不在需要时创建连接,并在使用它之后关闭它而不是依赖于创建的连接?

答案 3 :(得分:1)

对于MySQL,默认情况下,一个打开的连接(通常在连接池中等待)将在8小时不活动后关闭。您可以通过在my.cnf或我们的mysql命令行中配置wait_timeout变量,将此时间从8小时更改

请参阅: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

答案 4 :(得分:0)

几年前这个问题已被提出,但我觉得得到正确的答案是件好事。我有同样的问题,解决我不得不玩配置一点点。这对我有用。继续https://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html了解更多信息。下面的代码处理了一切。有办法优化价值观,但我会稍后处理这些。

<Resource name="jdbc/database" 
               auth="Container" 
               type="javax.sql.DataSource"
               maxActive="100" 
               maxIdle="30" 
               maxWait="10000"
          username="username" password="password" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql:///"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          validationQuery="SELECT 1"
          validationInterval="30000"`enter code here`
          timeBetweenEvictionRunsMillis="30000"
          minIdle="10" `enter code here`
          initialSize="10"
          removeAbandonedTimeout="60"
          removeAbandoned="true"
          logAbandoned="true"
          minEvictableIdleTimeMillis="30000" 
          jmxEnabled="true"         
           />