数据库炸了----我就重启了一下啊(Communications link failure)
重启数据库后,数据库大部分时间连不上了;连续请求不会报错,请求间隔时间稍微长一点就会报错
报错如图:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet successfully received from the server was 7,008 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
这里的意思是 7,008毫秒前创建的连接,现在不可用了。有的报错这个时间是很大的。
上网查资料(也问了老大,老大一看报错,说这样改最快,我追问了一下,老大说了下全局变量和会话变量的作用范围,和我后面找到的答案一样):
test-on-borrow: true #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-return: true #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
把这两个配置配上就能解决问题!!!但是,本来为了性能,这两个配置默认是false。问题的关键可能不在这,我就重启了一下mysql,本来是好好的,就是重启出了问题的。
继续查原因
1,查看mysql系统配置参数:
show VARIABLES like '%timeout%'
发现wait_timeout和interactive_timeout都是28800,8小时;并无异常
wait_timeout:针对非交互式连接,通过jdbc连接数据库是非交互式连接
interactive_timeout:针对交互式连接,通过mysql客户端连接数据库是交互式连接

2,查看mysql连接情况:
show processlist; 只展示100个连接
show full processlist; 展示所有连接
查看连接54个,还行,无异常

3,继续上网查资料:
于是忽找到了这篇文章:https://baijiahao.baidu.com/s?id=1642208511147231446&wfr=spider&for=pc
4,查看show status
Abort_clients表示客户端没有正确的关闭连接,而被终止的连接数,引起的原因:
a.客户端程序退出之前未调用mysql_close()来关闭mysql连接
b.客户端的休眠时间超过了mysql系统变量waittimeout和interactivetimeout的值,导致连接被mysql进程终止
c.客户端程序在数据传输过程中突然结束
有10万连接被异常中断!!!

5,查看mysql全局变量:
这里一个容易把人搞蒙的地方是如果查询时使用的是show variables的话,会发现没什么问题,这是因为单纯使用show variables的话就等同于使用的是show session variables,查询的是会话变量,只有使用show global variables,查询的才是全局变量。
上面看到两个超时时间都一样,是因为查的是当前会话的连接 的超时时间,当然是interactivetimeout和waittimeout一样,都是8小时,所以没发现问题。【一定要搞清楚每个命令的真实含义,不然只能抓耳挠腮了】
查看全局配置:
show GLOBAL VARIABLES like '%timeout%'
果然,wait_timeout 是5秒,5秒后mysql连接就会断开导致报错。

再去看了下配置文件:石锤了,配置文件中的wait_timeout 被人修改成了5秒。
interactive_timeout/wait_timeout:交互式和非交互式链接的超时设置,防止客户端长时间链接数据库,什么都不做处于sleep状态,强制关闭长时间的sleep链接。默认情况先两值的都为28800(8h)

6,真相大白:
wait_timeout被设置成了5秒,所以,所有的连接5秒后会被自动关闭,再次使用这个过期的连接就会报错
其中wait_timeout就是负责超时控制的变量,其时间默认长度为28800s,就是8个小时,那么就是说MySQL的服务会在操作间隔8小时后断开,需要再次重连;不知道是谁把他设置成了5秒。重启之后导致数据库连不上,一直报错。
那有人要问了,为什么重启了,出现了问题,原来怎么好好的?
这是一个好问题,我开始也百思不得其解,后来终于弄清楚了:
这是因为mysql的全局配置被修改了,重启mysql前这个配置生效的值并不是5秒。
使用 set global wait_timeout=28800就可以修改mysql全局变量。修改完后就不会再报错了。

不过这样修改不会一劳永逸,如果再次重启mysql,就会重新出现上面的问题。
整个过程应该是这样:第一次安装完mysql后,有人修改了配置文件中的wait_timeout参数为5秒,之后,这个参数又被修改了,这次是用命令set global wait_timeout=xxx,设置这个参数的全局配置为xxx秒(默认是8小时),一直稳定运行到现在。然后我重启了mysql,wait_timeout这个配置就恢复成了5秒,问题出现。
7、后记:
这是一个mysql的基础问题。基础太差导致排查问题用了很长时间。但凡一个科班出身都知道这个。
mysql 版本:5.6.44
试了下5.7.25-log查看命令结果就不一样了
数据库炸了----我就重启了一下啊(Communications link failure)的更多相关文章
- 解决Java程序连接mysql数据库出现CommunicationsException: Communications link failure错误的问题
一.背景 最近在家里捣鼓一个公司自己搭建的demo的时候,发现程序一启动就会出现CommunicationsException: Communications link failure错误,经过一番排 ...
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错
-- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...
- 应用端连接MySQL数据库报Communications link failure
事情的起因: 某项目的开发同学突然Q我们组的某同学,要求我们调整MySQL的连接等待超时参数wait_timeout.要求我们从28800s调整到31536000s(也就是一年) 应用端测试环境的to ...
- 数据库炸了——是谁动了我的wait_timeout
1.起因 隐约听到坐在我对面的测试说测试环境的接口有问题 他们一番商讨后,朝我这边反馈说,现在测试环境的接口报504 我条件反射的回了句那是接口超时,再多试几次(测试环境的性能比较差,尤其是数据库,经 ...
- Quartz动态修改数据库cronExpression(无须重启服务器即可更改定时时间)
quartz通过动态设置配置文件确实可以实现与数据库的同步,但现实开发上线后我们基本是不会对配置文件等进行变动,因为重启一次服务器所需的成本太多. 这时,就需要我们仅仅修改数据库就能实现动态的更新定时 ...
- ORACLE数据库的关闭与重启
一.关闭数据库 1.SHUTDOWN IMMEDIATE 这是我们常用的一种关闭数据库的方式,想很快地关闭数据库,但又想让数据库干净的关闭,常采用这种方式. 当前正在被Oracle处理的SQL语句立即 ...
- Communications link failure--分析之(JDBC的多种超时情况)
本文是针对特定的情景下的特定错误,不是所有Communications link failure错误都是这个引起的,重要的区分特点是:程序是不是在卡主后两个小时(服务器的设置)后程序才感知到,才抛出了 ...
- centos7环境配置haproxy实现mysql数据库和redis代理服务器
centos7环境配置haproxy实现mysql数据库代理 我们通常会碰到这样的业务场景: b主机和c数据库在同一个内网,a主机不能直接访问c数据库,我们可以通过在b主机上搭建代理让a访问c数据库, ...
- 在远程连接mysql数据库出现问题怎么办
远程连接mysql数据库报“Communications link failure...”错误 今天在用myEclipse连接时提示:Communications link failure,Last ...
随机推荐
- js正则常用方法
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>W3 ...
- 『GoLang』接口
接口是什么 Go 语言不是一种 "传统" 的面向对象编程语言:它里面没有类和继承的概念. 但是 Go 语言里有非常灵活的 接口 概念,通过它可以实现很多面向对象的特性.接口提供了一 ...
- 案例分享 | dubbo 2.7.12 bug导致线上故障
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star.搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读. ...
- P1758-[NOI2009]管道取珠【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P1758 题目大意 给出一个大小为\(n\)和一个大小为\(m\)的栈,每次选择一个栈弹出栈顶然后记录这个字母,求所 ...
- 深入浅出WPF-07.Property(属性)
依赖属性 1)字段与属性:字段被封装在实例中,要么能够被外界访问(非Private),要么不能够被外界访问(Private).但是我们直接把数据暴露给外界的做法不安全,容易把错误的数据写入字段.于是我 ...
- Superedge的新特性和未来之路
作者 王冬,腾讯云高级研发工程师,专注于Kubernetes.容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作. 背景 2021年9月27号,,在 ...
- java集合类之LinkedList
概述 a, 我们知道LinkedList它的数据存储方式是双向链表,基于链表存储的特性, LinkedList具有查询较慢(顺序访问)但增加/删除较快(虽然要遍历到指定位置, 但是相对于数组存储来说不 ...
- 利用Jackson序列化实现数据脱敏
几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...
- 阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程
我们先通过一段视频来看看函数计算和容器相结合后,在视频转码场景下的优秀表现.点击观看视频 >> FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维. ...
- 洛谷3648 [APIO2014]序列分割(斜率优化+dp)
首先对于这个题目. qwq 存在一个性质就是,最终的答案只跟你的分割的位置有关,而和顺序无关. 举一个小栗子 \(a\ b\ c\) 将这个东西分成两块. 如果我们先分割\(ab\)之间的话,\(an ...
