`

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

    博客分类:
  • java
 
阅读更多

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选项的客户端。

 

    wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义

 

    如此看来,两个变量是共同控制的,继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。 

 

MySQL的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。

 

   设置超时的话,就在/etc/mysql/my.cnf或Windows下在%MySQL HOME%/bin下有mysql.ini中增加
wait_timeout = 20
interactive_timeout =20

<!--EndFragment-->

一些常见的异常包括:(但不全面)

 

写道
Error configuring AutoCommit. Your driver may not support getAutoCommit() or setAutoCommit(). Requested setting: false. Cause: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5395)
at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.ibatis.datasource.pooled.PooledConnection.invoke(PooledConnection.java:225)
at $Proxy2.setAutoCommit(Unknown Source)

 

 

写道
java.sql.SQLException: Communication link failure:
java.net.SocketException, underlying cause:
Software caused connection abort: recv failed

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Software caused connection abort: recv failed

STACKTRACE:

java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1385)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1532)
...
** END NESTED EXCEPTION **
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1707)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1923)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1163)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1272)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1218)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2233)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2181)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1159)


 

  • 大小: 35.8 KB
分享到:
评论

相关推荐

    MySQL wait_timeout连接超时

    `wait_timeout`是MySQL服务器中的一个系统变量,它定义了在交互式会话(即没有显式启动事务的会话)中,如果客户端在指定时间内没有发送任何新的命令,服务器将关闭该连接的等待时间。默认值通常为8小时(8*60*60秒...

    关于MySQL的wait-timeout连接超时问题报错解决方案.pdf

    在 MySQL 中,wait_timeout 参数控制着连接的超时时间,如果设置的过大,可能会导致大量的 SLEEP 进程无法及时释放,拖累系统性能;反之,如果设置的过小,可能会遭遇到“MySQL has gone away”之类的问题。 wait_...

    dbcp连接池优化

    然而,在实际应用中可能会遇到诸如连接僵死等问题,这些问题会影响到连接池的正常工作,因此对DBCP连接池进行合理配置及优化至关重要。 #### 二、DBCP连接池基本概念 DBCP(Database Connection Pool)是一种基于...

    java连接各种数据库连接串.docx

    autoReconnect=true&sessionVariables=sql_mode='PIPES_AS_CONCAT'`,其中`127.0.0.1`是服务器IP,`db`是数据库名,`autoReconnect`和`sql_mode`是额外的连接参数。 - 对于Oracle,连接字符串可能是`jdbc:oracle:...

    c3p0 重新自动连接

    c3p0 重新自动连接 c3p0 重新自动连接 c3p0 重新自动连接 &autoReconnect=true

    使用连接池技术时的配置

    * maxWait:指定数据库连接池中的数据库连接处于空闲状态的最长时间。 2. 配置 web.xml 文件 如果 web 应用访问了有 Servlet 容器管理的某个 JNDI 资源,那么必须在 web.xml 文件中声明对这个 JNDI 资源的引用。...

    hibernate配置

    ### Hibernate配置解析与系统连接数问题详解 #### 一、问题背景 在开发或维护基于Hibernate框架的应用程序时,我们可能会遇到与数据库连接管理相关的各种问题。本文将针对一个具体的场景进行深入分析:如何通过...

    数据库的JAR包,以及连接字符串

    数据库是存储和管理数据的核心工具,对于开发人员来说,理解如何与不同的数据库系统进行交互至关重要。在Java编程环境中,这通常涉及到使用JAR(Java Archive)包来连接和执行SQL查询。本文将深入探讨Oracle SQL和...

    创建dbcp连接,dbcp(Spring)

    它允许开发者在应用程序中实现高效的数据库连接管理,通过复用已存在的数据库连接来减少每次请求时创建新连接的开销,从而提高系统的性能和稳定性。 在Spring框架中集成DBCP,可以通过配置XML来设置连接池的相关...

    MySQL数据库连接超时(Wait_timeout)问题总结.pdf

    MySQL数据库的连接超时问题,通常表现为Wait_timeout错误,指的是当客户端与服务器之间的连接在指定时间内没有进行任何数据交互,数据库会自动断开这个连接,以释放资源并防止不必要的资源占用。这一特性在MySQL中是...

    JDBC连接多种数据库的方法

    在IT行业中,Java Database Connectivity(JDBC)是一个重要的标准接口,它允许Java应用程序与各种数据库进行交互...理解和熟练掌握JDBC连接参数及使用方法,对于任何Java数据库开发人员来说都是基础且至关重要的技能。

    常用JDBC驱动与连接字符串整理.docx

    在使用数据库连接池时,如C3P0、HikariCP或Apache DBCP等,建议添加特定参数以优化性能和处理断开连接的场景,例如MySQL中的`autoReconnect=true`和`failOverReadOnly=false`。 在构建连接字符串时,应确保指定正确...

    关于MySQL的wait-timeout连接超时问题报错解决方案.docx

    这是因为 Hibernate 框架在执行数据库操作时,可能会长时间保持连接,而 MySQL 的 wait_timeout 参数设置的太小,导致连接超时。 error 信息分析 在出现连接超时问题时,错误信息可能如下所示: ERROR [org....

    autoreconnect:简单的 Meteor 客户端自动重连包

    AutoReconnect 是一个简单的 Meteor 包,用于将客户端重新连接到服务器。 主要适用于可能会遇到一些离线行为的 Meteor-Cordova / Web 应用程序。 添加包 $ meteor add nspangler:autoreconnect 用法 在客户端,只需...

    SEU-AutoReconnect:用于东南大学有线wlan的在线过长以后不能上网的自动断线重连与自动登录

    2. **断开与重连机制**:当检测到网络连接异常时,程序会模拟用户执行断开连接的动作,然后等待一段时间(如设置的重试间隔)后再尝试重新连接。这可能涉及到调用操作系统网络接口(如Winsock)进行网络连接的操作。...

    hibernate自动重新连接数据库proxool的使用

    通过合理的配置,我们可以优化连接池的性能,提高系统整体的健壮性和效率。在实际开发中,务必根据项目的规模和特性来调整`Proxool`的参数,以达到最佳的使用效果。在`hibernate配置自动连接数据库.docx`文档中,...

    MongoDBProxy:围绕MongoDB连接的代理,可自动处理AutoReconnect-exception

    您使用MongoDBProxy的方式与使用普通MongoDB连接的方式相同,但不必担心自己自行处理自动重新连接。 用法: &gt;&gt;&gt; import pymongo &gt;&gt;&gt; import mongo_proxy &gt;&gt;&gt; safe_conn = mongo_proxy.MongoProxy(pymongo....

    tomcat配置数据库断开频繁用c3p解决.zip

    在使用Apache Tomcat作为应用服务器部署Java Web应用时,可能会遇到数据库连接频繁断开的问题,这通常是由于数据库连接池管理不当或配置不适当所引起的。本文将深入探讨这个问题,并介绍如何利用C3P0连接池来优化和...

    WIN10断网自动重新连接教程.pdf

    - 确保在“源”字段中选择“Rasclient”,这通常与网络连接有关。 5. **添加操作** - 添加新的操作,选择“启动程序”。 - 浏览并选择之前创建的“AutoReconnect.bat”批处理文件。 - 完成设置后,一路点击...

Global site tag (gtag.js) - Google Analytics