`
hcleon
  • 浏览: 266870 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:mysql Connection.close() has already been called

阅读更多
mysql数据库连接空闲超过8小时自动断开,导致网站无法连接


开发了一个ssh架构的网站
发布到服务器上
当天好好的
第二天就不能访问
显示数据库连接关闭。
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.

上网查找原因,原来是mysql数据库连接超时,默认是8小时28800秒
我的是windows版的
更改my.ini文件
在[mysqld]增加wait_timeout=2880000或interactive_timeout=2880000 (800小时:))
linux系统配置文件:/etc/my.cnf

----------------------------下面转http://database.51cto.com/art/200903/116216.htm---------------------------
最近碰到一个mysql5数据库的问题。就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库。问题是待机一晚上后,第二天早上第一次登录总是失败。察看日志发现如下错误:

“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.”

经过一番调研,发现很多人都碰到过类似问题,但网上令人满意的回答并不多。mysql网站上的提问也很多,但并没有正确答案;百度知道上倒是有一个近似正确的回答。现将本人的解决办法总结一下:

上述问题是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值:

mysql﹥

mysql﹥ show global variables like 'wait_timeout';

+---------------+---------+

| Variable_name | Value |

+---------------+---------+

| wait_timeout | 28800 |

+---------------+---------+

1 row in set (0.00 sec)

28800 seconds,也就是8小时。

如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。这解释了为什么我的程序第二天不能登录的问题。

你可能会想到在tomcat的数据源配置中有没有办法解决?的确,在jdbc连接url的配置中,你可以附上“autoReconnect=true”,但这仅对mysql5以前的版本起作用。增加“validation query”似乎也无济于事。

本人觉得最简单的办法,就是对症下药:既然问题是由mysql5的全局变量wait_timeout的缺省值太小引起的,我们将其改大就好了。

查看mysql5的手册,发现对wait_timeout的最大值分别是24天/365天(windows/linux)。以windows为例,假设我们要将其设为21天,我们只要修改mysql5的配置文件“my.ini”(mysql5 installation dir),增加一行:wait_timeout=1814400

需要重新启动mysql5。

linux系统配置文件:/etc/my.cnf

测试显示问题解决了。
分享到:
评论

相关推荐

    swoole#swoole-wiki#3.13.4 - 错误信息: XXXX client has already been b

    错误信息: XXXX client has already been bound to another coroutine使用协程客户端时出现以下错误信息:re

    java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方案

    Apache Commons DBCP(Database Connection Pool)是一个开源的数据库连接池组件,它提供了数据源对象,方便管理和复用数据库连接,从而提高应用性能。 要解决这个问题,你需要确保你的Java项目正确地包含了Apache ...

    mysql 异常com.mysql.jdbc.CommunicationsException

    本次异常的具体描述为:“Communications link failure due to underlying exception: **BEGINNESTED EXCEPTION** java.io.EOFException STACK TRACE: java.io.EOFException at com.mysql.jdbc.MysqlIO.readFully...

    MySql.Data.dll8.0类库

    3. **ADO.NET支持**:MySQL.Data.dll遵循ADO.NET架构,提供了Connection、Command、DataAdapter、DataSet等核心对象,符合.NET开发者习惯。例如,使用 MySqlConnection 类建立到MySQL服务器的连接,使用 MySql...

    各版本mysql.data.dll文件

    5. **API与功能**:MySQL.Data.dll提供了一系列的类和方法,如MySqlConnection、MySqlCommand、MySqlDataAdapter等,用于执行SQL语句、打开和关闭连接、填充数据集等操作。这些类是ADO.NET模型的一部分,使得.NET...

    mysql-connector-java-8.0.31-jar包

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity)标准的驱动程序,允许Java开发者在Java应用中访问和操作MySQL数据库。本资源提供的"mysql-connector-...

    Mysqlconnection.java

    Mysqlconnection.java

    Struts的java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource异常的解决方法

    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/> ``` 3. **重启应用**:完成上述更改后,重新启动应用服务器,...

    C# MySQL.data.dll 各版本下载 用于连接mysql数据库 历史最全 分32位系统与64位系统

    在.NET环境中,要连接到MySQL数据库,需要一个特定的驱动程序,这就是`MySQL.data.dll`的作用。 `MySQL.data.dll`是MySQL Connector/NET的一部分,它是一个由Oracle公司提供的官方.NET框架适配器,允许C#等.NET语言...

    mysql.data.dll和system.data.dll,system.draw.dll

    适用于unity中出现The type or namespace name `MySql' could not be found. Are you missing an assembly reference?错误的解决方案

    mysql-connector-java-8.0.25-jar

    MySQL Connector/J 8.0.25 是一个用于Java应用程序的数据库驱动程序,它使得Java开发者能够连接到MySQL数据库服务器并执行SQL操作。这个jar文件是MySQL官方提供的,确保了与MySQL服务器的兼容性和稳定性。在本文中,...

    jdbc-mysql-connection

    Class.forName("com.mysql.jdbc.Driver"); // 创建连接 Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // ... 执行SQL操作 }...

    C#连接MySQL需要的MySql.Data.dll,MySql.Web.dll

    在C#编程环境中,连接MySQL数据库通常依赖于特定的数据提供者,这就是MySql.Data.dll和MySql.Web.dll的角色。这两个动态链接库(DLL)文件是MySQL官方提供的.NET数据访问组件,使得C#开发者能够轻松地与MySQL服务器...

    mysql.data.dll(.net 4.0或以前版本)

    MySQL.data.dll是MySQL数据库连接器的一个重要组件,主要用于.NET Framework 2.0、3.0、3.5和4.0版本。这个DLL文件是MySql Connector/NET的一部分,允许开发人员在使用.NET Framework开发的应用程序中与MySQL数据库...

    com.mysql.jdbc.Driver驱动包工具

    MySQL是世界上最受欢迎的开源数据库系统之一,而`com.mysql.jdbc.Driver`是MySQL连接Java应用程序的JDBC驱动程序。本文将详细介绍这个驱动包工具及其在IT领域中的应用。 首先,了解JDBC(Java Database ...

    C#连接mysql的Mysql.data.dll 5.0.8.1和6.2.1.0

    - 使用`MySqlConnection`类创建连接:`using MySql.Data.MySqlClient;`引入命名空间,然后使用`new MySqlConnection(connection_string)`创建一个连接实例。 - 打开和关闭连接:使用`Open()`方法打开连接,操作...

    MySql.Data 版本6.9.9.0

    在MySQL.Data中,主要的类包括`MySqlConnection`、`MySqlCommand`、`MySqlDataAdapter`和`MySqlDataReader`等。`MySqlConnection`是连接到MySQL服务器的主要类,它负责建立、管理和关闭与数据库的连接。`MySql...

    C#操作Mysql数据库的MySql.Data.dll下载

    当C#需要与MySQL数据库进行交互时,就需要借助于特定的数据提供者,这就是MySql.Data.dll的作用。MySql.Data.dll是Oracle公司提供的.NET数据访问组件,它使得C#应用程序能够无缝连接并操作MySQL数据库。 首先,我们...

    MySQL驱动 5.7 ,8.2

    - 建立连接:`Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password")` - 创建Statement对象:`Statement stmt = conn.createStatement()` - 执行...

    Mysql.Data(.net3.5;4.0).dll

    2. **ADO.NET对象模型**:MySQL.Data.dll 提供了诸如 MySqlConnection, MySqlCommand, MySqlDataReader 和 MySqlDataAdapter 等类,这些类对应于ADO.NET中的Connection, Command, DataReader 和 DataAdapter。...

Global site tag (gtag.js) - Google Analytics