MySQL连接空闲时间超过8小时报错原因与延伸知识

news2024/11/25 4:40:24

1 错误原因

1.1 两个参数

MySQL服务端两个参数控制连接超时时间:

  • wait_timeout
  • interactive_timeout

1.1.1 如何查看

show global variables like 'interactive_timeout'
show global variables like 'wait_timeout'
复制代码

1.1.2 含义与区别

wait_timeout:当一个连接处于空闲状态时,MySQL服务器在关闭连接之前等待的秒数。如果在这段时间内没有任何活动,MySQL将关闭连接。默认值28800秒(8小时)

interactive_timeout:当一个连接处于交互状态时,MySQL服务器在关闭连接之前等待的秒数。如果在这段时间内没有任何活动,MySQL将关闭连接。默认值为28800秒(8小时)

wait_timeout适用于非交互式连接,例如在应用程序中使用连接。interactive_timeout适用于交互式连接,例如在命令行中使用连接

1.2 核心原因

  • 程序通过连接池与MySQL建立一个连接A

  • MySQL通过wait_timeout维护连接A超时时间等于8小时

  • 假设应用程序连接池维护连接A超时时间等于16小时

  • 一段时间后连接A空闲时间已超过8小时但不足16个小时

  • 连接池认为连接A可用,继续使用连接A

  • 连接A此时已经被MySQL关闭所以报错

2 解决方案

根据上述原因分析我们知道,解决方案核心是设置合理的连接池连接超时时间,本章节通过Druid连接池进行说明。

2.1 配置官方文档

https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8
复制代码

2.2 关注参数

  • testOnBorrow
  • testOnReturn
  • testWhileIdle
  • timeBetweenEvictionRunsMillis
  • minEvictableIdleTimeMillis

2.3 参数配置

解决方案其实不复杂:不用去设置超时时间而是开启testWhileIdle,当申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效:

<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
复制代码

3 延伸知识

3.1 错误识别

  • 常见场景
    • 新应用访问量不高
    • 测试环境(第二天刚上班时访问)
  • 错误特征
    • 上线一段时间才报错
    • 这类错误时隐时现
    • 报错不是业务错误
    • 错误与数据库底层相关

3.2 池化访问常见错误

这种问题不仅出现在访问MySQL时,在访问其它一些数据源时也可能出现这个问题,例如ES与MongoDB等等。这是因为访问数据源一般都会使用连接池。

这些客户端的连接池可能没有类似testWhileIdle参数,这种情况下需要设置合理超时时间或者keep-alive时间解决,这需要结合数据源配置文档具体分析。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA System.nanoTime()与GO time.Now().UnixNano()区别

JAVA System.nanoTime() public static void main(String[] args) {long nano System.nanoTime();System.out.println(nano);} 输出&#xff1a;701863191254000&#xff0c;这个值有点奇怪&#xff0c;System.currentTimeMillis()不是System.nanoTime()的1000000倍。 这个值…

【springcloud开发教程】路由网关——zuul

官方资料&#xff1a;https://github.com/Netflix/zuul/ 什么是Zuul? Zuul包含了两个主要的功能&#xff1a;路由和过滤 路由功能将外部请求转发到具体的微服务实例上&#xff0c;是实现外部访问统一入口的基础&#xff0c;而过滤器功能则负责对请求的处理过程进行干预&#…

Ubuntu环境安装指定版本的docker 和一键卸载dockerdocker-compose

一、环境 我的linux系统是Ubuntu 22.04 二、开始安装 卸载旧版 由于apt官方库里的docker版本可能比较旧&#xff0c;所以先卸载可能存在的旧版本&#xff1a; $ sudo apt-get remove docker docker-engine docker-ce docker.io更新apt包索引 $ sudo apt-get update安装以下…

基础工业工程(易树平、郭伏)——第四章 程序分析

第四章 程序分析 第一节 程序分析概述 一、程序分析的概念、特点及目的 1&#xff0e;程序分析的概念 程序分析是一种重要的生产管理工具&#xff0c;它是依照工作流程&#xff0c;从第一个工作地到最后一个工作地&#xff0c;全面地分析有无多余、重复、不合理的作业&…

【单片机/普中A2】学习笔记3-数码管

数码管主要概念 参考文献&#xff1a;点击前往 数码管分类 字形重叠数码管&#xff1a;将不同数字、字母与符号重叠&#xff0c;需要用到那个就显示那个 分段式数码管&#xff1a;最常见的数码管&#xff0c;按照笔画来显示&#xff0c;主要有七段式和八段式数码管 点矩阵式…

JavaScript 代码整洁之道

文章目录概述篇变量篇函数篇注释篇异常处理篇复杂判断函数篇重构篇参考资料概述篇 书写能让人读懂的代码使用英语编写代码团队协作 制定通用的规则&#xff0c;依靠工具让团队的代码风格保持统一&#xff0c;要让代码看起来是由一个人编写的&#xff0c;消除个人的代码风格。…

这么好看的客服组件,还是觉得接入ChatGPT,把它放在博客中那就完美了

我们在使用ChatGPT时&#xff0c;它的返回方式是采用流式回复。感觉这个效果不错。之前做的全都是的等全部结果请求完成&#xff0c;再一次性返回给用户。今天就通过流式回复的效果重写之前的程序。 前端 前端采用一个网页版的客服组件&#xff0c;整体的效果如下&#xff1a;…

小白学Pytorch系列- -torch.distributions API Transforms (2)

小白学Pytorch系列- -torch.distributions API Transforms (2) AbsTransform AffineTransform 通过逐点仿射映射进行转换yloc⁡scale xy\operatorname{loc}\text { scale } \times xyloc scale x loc (Tensor or float) : 位置参数scale (Tensor or float) : 尺度参数event…

k8s Deployment

一个Deployment控制器会创建一个新的ReplicaSet控制器&#xff0c;通过ReplicaSet创建pod rs v1控制三个pod&#xff0c;删除一个pod&#xff0c;在rs v2上重新建立一个&#xff0c;依次类推&#xff0c;直到全部都是由rs v2控制&#xff0c;如果rs v2有问题&#xff0c;还可以…

Spark on Yarn(client和cluster模式,spark-shell 和 spark-submit 的区别,WorldCount实现与理解)

文章目录Spark on Yarn两种模式clientclusterspark-shell 和 spark-submit 的区别的理解spark-shellspark-submitWorldCount实现IDEA本地实现On Yarn 实现WorldCount图解Spark on Yarn spark on yarn 的两种模式是指 spark 应用程序的 driver 进程&#xff08;负责控制和协调整…

JAVA8的Optional类,还用 != null 判空?

在文章的开头&#xff0c;先说下NPE问题&#xff0c;NPE问题就是&#xff0c;我们在开发中经常碰到的NullPointerException.假设我们有两个类&#xff0c;他们的UML类图如下图所示 在这种情况下&#xff0c;有如下代码 user.getAddress().getProvince(); 这种写法&#xff0c;在…

springboot整合mybatis(idea)

从idea新建项目 选择spring启动* help、mvnw 文件可以删除 springBoot3.0需要的最小JDK是JDK17&#xff0c;当低于17的时候会报错。 改成2.7.6 新建控制层Controller、Mapper层和Model文件夹 必须在springBoot启动项下面新建&#xff0c;不然无法识别。 允许XML进入target…

Java - 泛型

一、什么是泛型&#xff1f; 一般的类和方法&#xff0c;只能使用具体的类型: 要么是基本类型&#xff0c;要么是自定义的类。如果要编写可以应用于多种类型的 代码&#xff0c;这种刻板的限制对代码的束缚就会很大。----- 来源《Java编程思想》对泛型的介绍。 泛型是在JDK1.5…

初次使用yolov8遇到的问题

记录第一次使用yolo8跑自己的数据&#xff1b; 首先将官方文档看一下&#xff0c;大概捉摸了2个小时&#xff0c;地址&#xff1a;GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > CoreML > TFLite 获得了基本的一些了解&#x…

$\Beta$分布推导与可视化

$\Gamma$函数 $\Gamma$函数(Gamma函数)是阶乘函数在实数和复数域的扩展。对于正整数$n$&#xff0c;阶乘函数表示为$n! 1 \times 2 \times ... \times n$。然而&#xff0c;这个定义仅适用于正整数。Gamma函数的目的是将阶乘扩展到实数和复数域&#xff0c;从而计算实数和复数…

代码随想录【链表】--->删除倒数第N个节点、链表相交、环形链表

⭐️代码随想录⭐️ 数组篇: 二分查找 移除数组 有序数组的平方 长度最小的数组 螺旋矩阵 链表篇&#xff1a; 链表移除 设计链表 反转链表 交换链表中的节点 文章目录19. 删除链表的倒数第 N 个结点思路代码面试题 02.07. 链表相交思路代码142. 环形链表 II思路判断链表有环确…

ARM 制作简易的根文件系统

一、根文件系统概述 1、为什么需要根文件系统 (1) init 进程这个应用程序&#xff0c;在根文件系统上。 (2) 根文件系统提供了根目录&#xff1a;/。 (3) 内核启动后的应用层配置(/etc 目录)&#xff0c;在根文件系统上。几乎可以认为&#xff1a;发行版 内核 rootfs。 …

Arduino开发之如何连接压力传感器模块?

文章目录0.引言1.压力传感器模块说明2.代码编写3.功能演示0.引言 在利用Arduino开发过程中&#xff0c;若需知道设备能感知到受到外部按压&#xff0c;设备可以通过压力传感器模块来感知周围环境。本文在【Arduino如何进行开发&#xff1f;】基础上&#xff0c;借鉴现有网络资料…

数字营销新宠:探究2023年YouTube网红营销的核心趋势和商业价值

2023年&#xff0c;YouTube网红营销已经成为全球广告营销行业的重要组成部分。YouTube作为全球最大的视频分享平台&#xff0c;每月活跃用户数达到了20亿&#xff0c;其中有超过100万的YouTube网红在平台上分享自己的创意和想法。在这篇文章中&#xff0c;Nox聚星将和大家探讨2…

Visual Studio如何使用Qt开发桌面软件?

文章目录0.引言1.开发环境配置2.编写第一个Qt程序0.引言 笔者熟悉的第一门编程语言是C#&#xff0c;当初本科毕业设计需要进行Qgis的二次开发&#xff0c;本想利用C#编程&#xff0c;但网上资料较少&#xff0c;多是利用Qt进行Qgis的二次开发&#xff0c;Qt是利用C编程&#xf…