MySQL连接超时

问题描述:

我在apache tomcat服务器上运行的程序,应该是永久的,但每天早上(客户端部分不能在晚*问)我收到错误消息(在Apache Tomcat控制台),MySQL服务器是关闭。那么有什么方法可以防止这种情况? 在此先感谢!MySQL连接超时

+0

你在使用连接到您的数据库?您是否正在使用连接池将数据库连接全部打开(并且不够聪明以便在完成时关闭它们,或者至少重新打开连接消失)? – Seth 2010-04-07 17:51:25

+0

OPS,我错过了我正在使用Hibernate API访问数据库 – NikolayGS 2010-04-07 18:20:13

+0

您能否粘贴确切的错误消息?在这之后你如何修复你的系统?你重新启动你的tomcat,一切都很好吗? – 2010-04-07 19:04:30

我想你直接在你的web应用代码中打开连接。 您可以尝试引入一个connection pool使用超时连接应重新建立。

如果这不起作用,请询问网络管理员他是否拥有有状态的过滤器来检测超时(当客户端空闲时)并关闭连接。

如果您使用的是数据库池,如c3p0或dbcp,请查看其文档,应该设置配置空闲超时或定期检查连接(这将保持连接打开,并且不会超时在服务器端)

+0

在这种情况下,我是管理员,但我不是那么先进,熟悉连接池,但我会阅读你的文章,并尝试搜索解决方案 – NikolayGS 2010-04-08 07:48:01

在一段时间后,mysql服务器超时连接,默认情况下它是28800秒,这很可能是您正在访问的超时。

通过将autoreconnect=true参数添加到jdbc url中,您可以指示mysql驱动程序在发生连接丢失时重新连接,例如, jdbc:mysql://localhost/mydb?autoreconnect=true

+0

我试过了(我必须把网址放在hibernata cfg文件中吗?)并且今天早上连接丢失了,但正如我提到的,当我重新启动tomcat时,一切正常(先前必须先重新启动第一个mysqld.exe) – NikolayGS 2010-04-08 07:43:58

+2

值得注意的是[MySQL Connector/J文档](http ://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html#idm140446220006144)*“,因为它在应用程序不具有会话状态和数据一致性时会产生副作用正确处理SQLExceptions,并且只能在您无法配置应用程序以正确处理由于死锁和陈旧连接导致的SQLExceptions时使用。*。 – 2015-04-22 13:44:30

是的,我有同样的问题。尝试将验证查询添加到您的数据源。

下面是我定义我的:

<Resource auth="Container" 
      type="javax.sql.DataSource" 
      name="jdbc/gporder" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/mydb" 
      maxActive="10" 
      maxIdle="5" 
      validationQuery="SELECT 1" 
      testOnBorrow="true" 
      testWhileIdle="true" 
      timeBetweenEvictionRunsMillis="10000" 
      minEvictableIdleTimeMillis="60000" 
      username="..." password="..."/>