`
a515010475
  • 浏览: 25818 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MYSQL BUG #5020及解决方法

阅读更多
Connection was closed due to the following exception:

** BEGIN NESTED EXCEPTION **

java.sql.SQLException
MESSAGE: 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)
    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.Connection.execSQL(Connection.java:2236)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1555)
    at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:89)
    at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:880)
    at net.sf.hibernate.loader.Loader.doQuery(Loader.java:273)
    at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:138)
    at net.sf.hibernate.loader.Loader.doList(Loader.java:1063)
    at net.sf.hibernate.loader.Loader.list(Loader.java:1054)
    at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
    at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1554)
    at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
    at net.sf.hibernate.impl.SessionImpl.delete(SessionImpl.java:1678)
    at net.sf.hibernate.impl.SessionImpl.delete(SessionImpl.java:1664)
出错原因:
   我们的系统一天24小时运行,但在夜晚的时候是没有人连接的,因此Socket连接就超时了。早上尝试做任何事情(比如:登录)都将以失败告终,除非我们关闭连接或者重新建立连接。到3.0.11后才会发生这种情况。
   现在我们使用的MYSQL版本号为4.016,问题一样。
专家建议:
   [Mark Matthews],翻译如下:
   注意:我不赞成Autoreconnect功能,在以后的发行版本中,它最终会被移除。在这种特殊情况下, 它不起作用的原因是:在3.0.11以后,autoreconnect的方法变得更加安全了并且和阿utoCommit状态有关联,这样的话就能使当前‘in-flight’事务失败(如果你在失败后,再次试图连接事务,就会重新被连接)。请查看相关解释文档,文档的修复故障中包括如何正确实用这个属性。无论在哪种情况下,   如果TCP/IP在没有连接的情况下并且还不会冒着数据库被瘫痪的危险,是没有百分之百的方式使得JDBC驱动器被自动重连接的,这也是为何要移除Autoreconnect功能的原因。不管网络发生什么情况,    JDBC 都不会说明这个连接是否处于连接状态。JDBC driver 客户端负责处理网络故障,只有应用程序本身(实际上是应用程序的开发者)知道如何正确应对事务失败的情况。在服务器上过期的‘Wait—timeout’基本上是服务器给与的强制性网络故障。你通过把‘Wait—timeout’设置的高点儿就可以改正它,尽管如此,作为一个开发者,你的代码应该包含相关的异常处理并采取适当的恢复措施,不要都把它们传到调用堆中。
   连接错误总是有一个SQL状态‘08’。如果你发现它的话,你可以再连接一次并重试事务(如果是适当的话)
   不管什么原因,如果这样不起作用的话,配置你的连接池来测试是否处于连接状态并且那些长时间闲置连接(所有的连接池都能这样做,但是它们的配置取决于池子)。
作者说明:在MYSQL4.1以后的版本当中,没有“wait_timeout”变量,由interactiveClient代替
参考资料:http://dev.mysql.com/doc/connector/j/en/cj-configuration-properties.html
     [Kirk Wylie]:翻译如下:
   如果有一个事务在运行的话,就能得到一个特别简单的例子:
    ---如果连接在autoCommit模式下,autoReconnect是安全的。
    ---如果连接不在autoCommit模式下,但是没有打开的事务,autoReconnect是安全的。(因为连接可能在池在里面)
    ---如果连接不在autoCommit模式下,有打开的事务,这样就会抛出异常。
   这样会解决你不在autoRecom\nnect模式下的忧虑并且会保留应用程序的功能性。
   尽管如此,在它改变的时候,在改变日志中没有任何记录说明发生了改变,这点令我很烦。由于这种改变很可能破坏我的应用程序,这种变化因该添加到CHANGE文件中。

  如下是我个人的做法:
  (STRUTS+SPRING+HIBERNATE)
  1、把mysql的变量interactiveClient由 默认的28800(8个小时)延长。并告知用户多长时间后,重新启动TOMCAT服务器。不过,MYSQL5.0.12版本以前的所有版本,只要你设置成 了默认语言为GBK,所有对interactive_timeout(wait_timeout)的时候如何设置,重新连接或者重新启动MYSQL后,都 是28800,现在我使用的5.0.18后,使用GBK,没有问题。
  2、在HIBERNATE当中加入:
   
..
<property name="hibernate.connection.url">jdbc:mysql://192.168.100.111/eai?autoReconnect=true</property>
<property name="enableDeprecatedAutoreconnect">true</property>
<!--  如下的语句是使用第三方的DBCP来建立连接池 -->
<property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<!--  看到了没有,这个maxWait一定要大于MYSQL默认的28800(秒) -->
<property name="dbcp.maxWait">30000</property>
<property name="dbcp.maxIdle">10</property>

<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">30000</property>
<property name="dbcp.ps.maxIdle">10</property>
..
    
 如上两种方法均可,推荐大家使用第二种方法,来遮挡一下MYSQL的BUG。
如果有不对之处,请大家提出自己的见解。

http://www.blogjava.net/heweiya/archive/2006/01/18/28483.html
分享到:
评论

相关推荐

    解决delphi7使用TSQLCONNECTION连接mysql5无法设置端口的bug

    delphi7使用TSQLCONNECTION连接mysql5无法设置端口的问题,经常...并修改了Tsqlquery报错的bug 下载新的dbxopenmysql50.dll后,添加SQLCONNECTION1.Params.Append('Server Port=3388' )代码即可,端口改为mysql的端口。

    Bugfree使用手册

    BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理系统。简单实用、免费并且开放源代码(遵循GNU GPL)。 如何有效地管理软件产品中的Bug,是每一家软件企业必须面临的问题。遗憾的是很...

    MySQL数据中很多换行符和回车符的解决方法

    这么多BUG!得啵得啵得…”(省略2000字)又习惯性的喷了一遍我们这个项目做的辣鸡~~ 得得得,客户随便喷,我就当吃了个早饭了:slightly_smiling_face::slightly_smiling_face::slightly_smiling_face:嗝儿~嗯,真饱...

    支持mysql5.6.19的canal版本

    解决现在开源版本canal使用mysql5.6.19版本以上bug,mysql连接不断开的bug

    java项目之ssm软件bug管理系统完整源码(ssm+mysql).zip

    BUG信息管理(各个环节的跟踪信息录入) 查看解决方案 解决方案人员 个人信息管理,修改 查看缺陷信息 提出解决方案 所需开发环境: 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7+ 数据库:mysql 5.7+ ...

    Mysql单文件存储删除数据文件容量不会减少的bug与解决方法

    主要给大家介绍了Mysql单文件存储删除数据文件时容量不会减少的bug与解决方法,文中给出了详细的解决方法,相信对遇到这个问题的朋友们能带来一定的帮助,下面来一起看看吧。

    BugFree v2.1.3

    字段筛选高亮消失的问题在Test Case导入失败之后,增加了导入失败原因说明在左下角“指派给我”和“由我创建”的Bug标题增加显示状态图标在相关Bug/Test Case/Test Result增加标题的TipBug邮件规则更新:创建者、解决

    MySQL数据库疑难杂症排查.pptx

    MySQL数据库疑难杂症排查.pptx

    mysql-installer-community-8.0.30.0.msi

    极具吸引力的是官方在8.0版本上对MGR bug 的持续修复和功能完善,以及对数据库整体性能的提升,使得不少企业在生产开始使用8.0版本。对于银行业而言,虽然基本上还是采用其上一个版本-5.7,但研究、测试并使用8.0...

    修正了bug的php+mysql+jquery联动菜单

    之前下载的别人的,有个小bug,解决了重新传供分享

    Java基于ssm+mysql的ssm软件bug管理系统的实现.zip

    Java基于ssm+mysql的ssm软件bug管理系统的实现.zip ssm +mysql 管理员 个人密码修改 项目经理管理 员工管理(调试员,解决方案人员) 日志管理(用户登录日志) 系统设置 项目经理 个人信息管理,修改 项目模块管理 按...

    使用Mysql5.x以上版本出现报错#1929 Incorrect datetime value: ”” for column ”createtime”的快速解决方法

    官方解释说:得知新版本mysql对空值插入有”bug”, 要在安装mysql的时候去除默认勾选的enable strict SQL mode 那么如果我们安装好了mysql怎么办了,解决办法是更改mysql中的配置 my.ini 解决方法: 修改my.ini配置...

    易语言实现mysql注册与登录

    我发现论坛上.易语言对mysql的操作的教学比较少.而且,很多人询问使用mysql进行注册的问题. 所以.写了这一段源代码. --特点------------------------------------...或许个个别的bug.也请自行解决 解压密码:by:heiljsf

    Lccwin32 MySQL 开发包(4.0.9-伽马)

    使用方法、特性、甚至是BUG(如果有的话)完全相同。lccwin32是一个免费的编译器,配有IDE(编辑器不支持中文)、效率高、完整Win32API支持,以及高达350位的浮点运算支持,而体积只有3.63M!如果购买商业许可将获得BDB...

    access php 驱动 access转mysql方法之一 access to mysql

    bug解决,主要就是上面没有进行gb2312转utf8 一般access用gb2312的多 代码如下: $title= mb_convert_encoding(odbc_result($query,"title"),'UTF-8','GBK'); 把mysql数据表 自增设置为1,把access id给 mysql数据表,...

    软件公司Bug管理系统的设计与实现

    通过本次毕业设计,达到综合运用知识的能力,提高独立分析问题、独立解决问题以及创新的能力。系统采用B/S结构,前台开发环境为MyEclipse8.5,后台数据库为MySql,设计开发Bug管理系统。

    MySQL安装+配置+运行(Windows10)

    Windows10下的Mysql的安装+环境配置+连接到Navicat出现的bug的解决。

    最新Bugfree

    1.本下载包中包括 安装完 xampp后 apache,mysql 就自动安装了。 2.本包包括 bugfree_v3.0.4.zip ... bugfree 安装时遇到问题解决过程.doc 3.所有bugfree相关东西一站齐全,非常不错推荐下载使用

    jQuery改写上一个城市的三级联动(解决浏览器兼容bug)

    项目使用的开发技术:hibernate+struts+ajax+jQuery+mysql 与上一个三级联动不同的是:上一个项目是使用dom技术编写的整个js代码,存在一定的不足与bug,即浏览器不兼容,只在火狐中有成效,IE、opera、google等都...

Global site tag (gtag.js) - Google Analytics