文档章节

数据库连接断开 Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

为了美好的明天
 为了美好的明天
发布于 06/27 11:51
字数 862
阅读 20
收藏 1

报错信息如下:

Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 97,130 milliseconds ago. The last packet sent successfully to the server was 24 milliseconds ago.
; SQL []; Communications link failure
....
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

产生问题的直接原因:

  1. 数据库重启
  2. 数据库空闲连接超过设置的最大timemout时间

导致数据库会强行断开已有的链接,就会报这个异常。

产生问题的根本原因:

以mysql5版本为例,其自身连接的等待时间(wait_timeout)缺省为8小时,如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就会产生上述错误。

问题解决:

一、马上止损的方法:

重启服务器。(重启服务器,数据库连接池就会重新初始化, 重新获取和数据库的有效连接)

二、避免产生上述问题的方法:【你需要自己按自己采用的连接池,类型去搜索相应的配置,不同连接池可能不同】

1、数据库连接池增加探活配置。(在连接池配置文件中增加下面的关键属性) (推荐这种方式)

为了解决这个异常,我们在配置数据库连接池的时候需要做一些检查连接有效性的配置,这里以Druid为例,相关配置如下(更多配置):这里还有一个(dbcp的配置

字段名 默认值 说明
validationQuery   用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
validationQueryTimeout   单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
timeBetweenEvictionRunsMillis 1分钟(1.0.14) 有两个含义:1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明

为了避免空闲时间过长超过最大空闲时间而被断开,我们设置三个配置:

validationQuery: SELECT 1
testWhileIdle: true
timeBetweenEvictionRunsMillis: 28000

其中timeBetweenEvictionRunsMillis需要小于mysql的wait_timeout

实例:

        

 

2、增大数据库默认的超时等待时间(wait_timeout) 【如果太大,可能导致连接数较多,引起性能下降】

修改MySQL的参数,wait_timeout最大为31536000即1年,在my.cnf中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
重启生效,需要同时修改这两个参数。

 

3、JDBC配置Mysql连接URL重连机制

jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true

 

4、JDBC减少连接池内连接生存周期:使之小于所设置的wait_timeout 的值

<property name="maxIdleTime" value="1800" />   

 

© 著作权归作者所有

为了美好的明天

为了美好的明天

粉丝 37
博文 647
码字总数 185246
作品 0
通州
程序员
私信 提问
ActiveMQ:No operations allowed after statement ...

ActiveMQ版本:5.5.1 记录人:@郑昀现象: 系统现象:部分消息发送失败,失败频率不正常。 日志信息:activemq.log 中一直有这样的错误日志: 看上去又是 mq broker 失去了数据库连接,但代码...

旁观者-郑昀
2012/11/10
0
0
mysql : Communications link failure 何解?

软件环境:mysql 5.5.25 应用使用数据库连接池 c3p0 经常会发生如下异常: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications......

胡咧咧
2013/05/29
9.7K
4
spring+mybatis 数据连接失败问题

mysql会频繁的出现以下异常,以为是mysql的8小时超时问题,根据网上说的,已经把mysal的time_out时间设到很大了。但是貌似没有效果。 从问题log来看,有一点非常不解,我的操作是登录,为什么...

映象三木
2015/11/11
1K
2
mysql进行activiti自动生成数据库表时出现的各种问题

最近项目上需要用到activit,后来网上了解了下需要创建对应的23张表,是可以通过一个代码来自动生成的,但是我操作的过程中遇到了很多问题: 首先生成库的代码如下: // 使用代码创建activit...

aiChuang
2018/12/29
0
0
idea hibernate mysql诡异的连接问题

首先mysql的配置没有问题。因为我在IDEA中新建DATA Source然后配置好后是可以连接的,执行建表操作也没有任何问题(idea自带的数据库连接没有任何问题) 然后从持久化窗口中右键项目选择生成持...

cgcgbcbc
2013/12/21
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

拥有有趣灵魂的程序员们,程序员访谈(一)

点击上方关注我们,让小care关爱你! 程序员群体一直都是低调多金的代表,而近段时间以来,程序员在网络上除了高薪之外,总是会和屌丝、苦逼、格子衫、没情趣...联系在一起。黑程序员的段子也...

ITCare
56分钟前
12
0
Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
今天
8
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
今天
7
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
今天
12
0
从蓝鲸视角谈DevOps

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

嘉为科技
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部