`

MYSQL BUG #5020及解决方法

 
阅读更多
MYSQL BUG #5020
描述:
   MYSQL网站BUG公示
错误MESSAGE:
    
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->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连接就超时了。早上尝试做任何事情(比如:登录)都将以失败告终,除非我们关闭连接或者重新建立连接。

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">3.0.11</span></chsdate>后才会发生这种情况。
   现在我们使用的MYSQL版本号为4.016,问题一样。
专家建议:
   [Mark Matthews],翻译如下:
   注意:我不赞成Autoreconnect功能,在以后的发行版本中,它最终会被移除。

在这种特殊情况下, 它不起作用的原因是:在<chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on"><span lang="EN-US">3.0.11</span></chsdate>以后,autoreconnect的方法变得更加安全了并且和阿utoCommit状态有关联,这样的话就能使当前‘in-flight’事务失败(如果你在失败后,再次试图连接事务,就会重新被连接)。请查看相关解释文档,文档的修复故障中包括如何正确实用这个属性。

无论在哪种情况下,   如果TCP/IP在没有连接的情况下并且还不会冒着数据库被瘫痪的危险,是没有百分之百的方式使得JDBC驱动器被自动重连接的,这也是为何要移除Autoreconnect功能的原因。

不管网络发生什么情况,    JDBC 都不会说明这个连接是否处于连接状态。JDBC driver 客户端负责处理网络故障,只有应用程序本身(实际上是应用程序的开发者)知道如何正确应对事务失败的情况。在服务器上过期的‘Waittimeout’基本上是服务器给与的强制性网络故障。你通过把‘Waittimeout’设置的高点儿就可以改正它,尽管如此,作为一个开发者,你的代码应该包含相关的异常处理并采取适当的恢复措施,不要都把它们传到调用堆中。


   连接错误总是有一个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当中加入:
   
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->..
<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。
如果有不对之处,请大家提出自己的见解。

分享到:
评论

相关推荐

    mysql proxy问题的解决方法

    MySQL Proxy 是一个轻量级的中间件,用于在 MySQL 客户端和服务器之间提供额外的功能,如负载均衡、故障切换、数据过滤等。然而,使用 MySQL ...记得保持 MySQL Proxy 的更新,以便获得最新的 bug 修复和性能改进。

    bugfree安装出现问题的解决方法

    通过以上详尽的解决方案,即使在安装bugfree时遇到MySQL兼容性、Apache服务启动失败、端口冲突或Internet Server Error等常见问题,也能轻松应对,确保bugfree顺利安装并高效运行。这不仅有助于提升软件测试效率,还...

    php7.1+mysql5.0+bugfree.rar

    本文将详细介绍如何在PHP7.1和MySQL5.0环境下成功部署并使用BugFree,以解决这些困扰。 一、BugFree简介 BugFree是一款基于Web的缺陷跟踪系统,旨在提高软件开发过程中的缺陷管理效率。它支持多用户协作,提供丰富...

    bugfreee一个bug管理系统jsp+mysql

    总的来说,Bugfree是一个实用的bug管理系统,它充分利用了JSP的动态网页能力和MySQL的数据管理优势,为软件开发团队提供了一个便捷的工具,以更好地追踪、管理和解决项目中的bug,从而提升整个项目的质量和效率。...

    mysql-installer-5.5.25.0 安装失败解决方案

    - 如果以上方法都无法解决问题,可以考虑手动安装MySQL。 - 手动安装需要下载MySQL的压缩包,解压后根据官方文档逐步配置环境变量、初始化数据库等。 6. **查看日志文件**: - 查看安装过程中产生的日志文件,...

    MySQL免安装版CMD命令启动和Navicat的Oracle、Mysql的数据迁移

    #### 三、常见问题及解决方法 - 如果在启动过程中遇到错误提示,检查`my.ini`配置文件是否正确配置了路径。 - 初始化`data`文件夹:如果配置无误但仍出现错误,可以尝试使用命令`mysqld --initialize`来初始化`data`...

    MySQL5.5.15 linux安装配置

    Please report any problems with the /usr/bin/mysqlbug script! ``` 该输出提示您设置MySQL root用户的密码,并提供了两种设置密码的方法。 #### 四、安装MySQL客户端 安装完服务端之后,接下来安装MySQL客户端...

    BugFree在Linux环境的安装详情

    本文详细介绍了如何在Linux环境下安装BugFree缺陷跟踪系统,包括了安装前的准备工作、具体步骤以及可能遇到的问题及解决方法。遵循本文提供的指导,可以帮助您顺利地在Linux环境中部署并使用BugFree,从而提高软件...

    apache+svn+MySQL+PHP+svnmanager+bugfree完全安装手册

    ### Apache+SVN+MySQL+PHP+SVNManager+BugFree 完全安装手册 #### 一、Apache+SVN 安装与配置 ##### 1. 安装 Apache 2.2.9 在安装 Apache 之前,请确保你的计算机运行的是 Windows 2000、Windows XP SP1 或 ...

    bugfree安装相关

    ### Bugfree安装指南及MySQL密码修改方法 #### 一、Bugfree简介 Bugfree是一款开源的缺陷跟踪系统,主要用于管理软件开发过程中的缺陷记录、跟踪和处理。它基于Web技术,支持多用户协同工作,是项目管理和软件测试...

    案例加持:一小时掌握这套MySQL故障排查思路方法_崔虎龙.pdf

    - MySQLBug:若怀疑是MySQL自身的Bug,应检查相关资料,看是否已有解决方案。 文档中提到了一种“MySQL问题分析树”,它将问题的切入点和可能的组成部件进行了层级划分。利用这种分析树,可以更系统地定位问题所在...

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

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

    基于ssm+mysql的软件bug管理系统源码数据库.docx

    ### 基于SSM+MySQL的软件Bug管理系统:关键技术解析 #### 一、系统概述与背景 在软件开发过程中,Bug的管理是一项至关重要的任务。一个高效的Bug管理系统能够帮助团队快速定位问题、分配资源并跟踪修复进度,从而...

    Linux环境下BugFree的安装与相关问题解决

    在`linux安装bugfree.txt`文件中,应包含了安装过程中可能遇到的问题及解决方案。常见问题可能包括: - PHP扩展缺失:检查是否安装了`php-gd`, `php-xml`, `php-curl`等必要扩展。 - MySQL连接失败:检查数据库...

    解决Jira7.2与 MySQl 5.7 驱动包可用mysql-connector-java

    本篇文章将深入探讨如何解决Jira 7.2版本与MySQL 5.7驱动包不兼容的问题,以及涉及的相关知识点。 首先,我们要明确问题的核心:Jira 7.2不能识别或使用MySQL 5.7提供的驱动包`mysql-connector-java-5.1.39-...

    基于ssm+mysql的软件bug管理系统源码数据库论文.docx

    基于SSM+MySQL的软件BUG管理系统源码数据库论文 本论文的主要目的是设计和实现一个基于SSM(Spring+SpringMVC+MyBatis)框架和MySQL数据库的软件BUG管理系统。该系统旨在提供一个高效、可靠的BUG管理平台,帮助...

    BugFree的安装教程详解

    登录MySQL数据库管理工具phpMyAdmin,创建一个新的数据库用于存放BugFree的数据。 **步骤4:运行安装脚本** 在浏览器中输入`http://localhost/bugfree/install.php` 来执行BugFree的安装脚本。 **步骤5:完成安装*...

Global site tag (gtag.js) - Google Analytics