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

Communications link failure的解决办法

 
阅读更多

使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:

Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was ***  millisecond ago。

其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。

后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:

MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

修改MySQL的参数,wait_timeout最大为31536000即1年,在my.cnf中加入:

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

重启生效,需要同时修改这两个参数。

 

解决方法:

<property name="validationQuery" value="select 1" />
<property name="testOnBorrow" value="true" />
<property name="testWhileIdle" value="true"/>

 

  原因:

 应用druid连接池,长时间没有请求造成的数据库连接超时,抛出异常:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

比如开启事务,然后其他业务操作,然后db操作。

 

关于数据库连接池的最大空闲时间的配置

java的所有的连接池 无论是c3p0、dbcp还是druid,都有一个类似maxWait或者maxIdleTime配置项。具体含义就是当连接长时间没有向服务器发请求的 时候,断开这个连接,避免对数据库连接的浪费。这个时间不是随便设的,它的依据是数据库的连接最大空闲时间。

以mysql为例,它有个_wait_timeout 参数,你可以通过命令show variables like “%timeout%”查看
+—————————–+———-+
| Variable_name               | Value    |
+—————————–+———-+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 3600     |
| wait_timeout                | 28800    |
+—————————–+———-+

wait_timeout默认的时候是8个小时28800秒,但是有时候可能被不经意修改。这个时间表示当连接在28800个时间没有向服务器发请求的时候,它就会断开这个连接。
你可以通过set global wait_timeout=60000来修改。不过好像interactive_timeout也必须同时修改才可以,要不wait_timeout改不 了,它会用interactive_timeout的值初始化wait_timeout(这个原理又是另外一回事了).

所以在使用连接池的时候maxWait或者maxIdleTime,这个参数必须设置为小于wait_timeout的值,否则的话,当你的连接长 时间没和数据库交互,服务器早把你的连接断开了,而你的连接池还认为是有效的连接,除非你设置testOnBorrow或者testOnReturn设置 为true,这样当连接每次从连接池中取出或者放回的时候检查下连接是否有效。不过这样回牺牲一点性能。
否则你就会收到下面这样类似的异常,特别是经过一个耗时长的查询之后,这个连接再用于进行下次数据库操作的时候。

The last packet successfully received from the server was 1,867,460 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

 

 

http://zhaoyanblog.com/archives/486.html

https://github.com/alibaba/druid/issues/1022

 

 

 

 

分享到:
评论

相关推荐

    Durid连接Mycat+MySQL过程中报1243错误的解决办法

    开始受到“Communications link failure”和“连接超时”等信息的误导,一直将问题定位在“MySQL 连接超时时间”Timeout 参数上,该参数默认为 8 小时,并且一直认为问题就出在 “MySQL”上,甚至于要大动干戈的将 ...

    特好用的FTP管理工具

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。它允许用户从一台计算机(客户端)向另一台计算机(服务器)上传、下载或管理文件。"特好用的FTP管理工具"指的是那些功能强大...

    mysql-connector-java-8.0.23.zip druid-1.2.8.jar 资源包

    java 连接数据库资源包 mysql-connector-java-8.0.23.zip druid-1.2.8.jar

    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...

    pycharm工具连接mysql数据库失败问题

    对于本地PC上的MySQL安装,一个持久的解决办法是在PyCharm的数据库连接配置中指定`serverTimezone`属性。在PyCharm中,你需要进入“Data Sources & Drivers”设置,找到你的MySQL数据源,然后在“Advanced”选项卡中...

    Kettle所有数据库数据库连接驱动Jar

    在IT领域,数据库连接是数据集成过程中的关键环节,特别是在使用工具如Kettle(也称为Pentaho Data Integration,简称PDI)时。Kettle是一款强大的ETL(Extract, Transform, Load)工具,用于从各种数据源抽取数据,...

    阿里云ECS云服务器(linux系统)安装mysql后远程连接不了(踩坑)

    主要介绍了阿里云ECS云服务器(linux系统)安装mysql后远程连接不了(踩坑),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

    ERROR [org.hibernate.util.JDBCExceptionReporter] - Communications link failure Last packet sent to the server was 0 ms ago. 这种错误信息表明,MySQL 连接已经超时,无法与服务器进行通信。如果不是第一次...

    MySQL wait_timeout连接超时

    当遇到“Communications link failure”这样的错误时,有几种可能的解决策略: 1. **增加`wait_timeout`值**:如果应用中存在长时间无操作但仍需保持连接的情况,可以考虑增大`wait_timeout`的值。这可以通过在...

    mycat使用禁区

    在使用MyCat过程中,可能会遇到“Communications link failure”这类错误提示,表明与后端数据库的连接出现了问题。 **原因分析:** 1. **网络异常**:包括但不限于网络断开、路由器故障等情况。 2. **后端数据库...

    BSS信令详解 掌握各信令的组成和用途

    在通信领域,BSS(Base Station Subsystem,基站子系统)信令是移动通信系统中的重要组成部分,特别是在GSM(Global System for Mobile Communications,全球移动通信系统)中。BSS信令主要涉及基站控制器(BSC)与...

    JDBC 程序的常见错误及调试方法

    错误信息可能表现为“***municationsException: Communications link failure due to underlying exception”以及一个***.ConnectException异常。这通常意味着无法建立到数据库服务器的网络连接。解决方法是确认IP...

    浅析mysql交互式连接&非交互式连接

    这可能导致应用程序在尝试使用这些已断开的连接时遇到“Communications link failure due to underlying exception”异常。 解决这个问题的方法通常包括以下几点: 1. 调整`wait_timeout`值,增加到更长的时间,以...

    LCTF软件备份VariSpec™ Liquid Crystal Tunable Filters

    Of course, to use the new functions one must link the application code with the new .lib file containing these functions. Previous release: 1.20 Release date December 3rd, 2003 Known bugs: a) there ...

    TeeChart2013_131216_SourceCode

    applications as executables or dynamic link libraries, including as OCX ActiveX Controls or ActiveX Forms, excepting compilation as design-time packages or compilation into a DLL or OCX for use in a...

    TeeChart2013_130818_SourceCode

    applications as executables or dynamic link libraries, including as OCX ActiveX Controls or ActiveX Forms, excepting compilation as design-time packages or compilation into a DLL or OCX for use in a...

    Vagaa哇嘎画时代--体验群体智慧的力量!

    Vagaa does not have any responsibility or liability for any information, data, communications, products or materials available on such third-party sites. These linked and framed sites are only for ...

Global site tag (gtag.js) - Google Analytics