Mysql的CommunicationsException
一、报错内容
com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 1,500,378 milliseconds ago.
The last packet sent successfully to the server was 1,500,378 milliseconds ago. is longer than the server configured value of 'wait_timeout'.
You should consider either expiring and/or testing connection validity before use in your application,
increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
二、报错解释
客户端和 MySQL 数据库的连接由于长时间没有使用而超时断开。
逐句分析:
1、The last packet successfully received from the server was 1,500,378 milliseconds ago.
表示上次从服务器接收到的成功数据包已经过去了 1,500,378 毫秒(约25分钟),即在过去的这段时间里没有任何通信发生。
2、The last packet sent successfully to the server was 1,500,378 milliseconds ago.
说明上一次向服务器成功发送数据包的时间也是 1,500,378 毫秒前。也就是说,客户端与数据库的连接在过去 25 分钟内没有任何活动。
3、wait_timeout
这个报错提到 wait_timeout 是 MySQL 的一个配置项,表示数据库允许空闲连接保持的最大时间。如果超过这个时间没有任何通信,MySQL 就会自动关闭这个连接。你的连接可能因为空闲时间过长,超过了 wait_timeout 的配置值而被断开。
三、解决方案
1、重启服务,重置数据库连接。
2、增加 MySQL 的 wait_timeout 配置值:你可以在 MySQL 服务器的配置文件中增加 wait_timeout 的值,以允许连接保持更长的时间不被断开,我这边配置的是15分钟。
3、使用 autoReconnect=true:MySQL Connector/J 提供了 autoReconnect=true 的配置项,启用后,在连接断开时,会自动重新连接数据库,这样可以避免因为连接超时导致的错误。
4、当使用连接池连接数据库时,如果是druid连接池,通过配置druid.connectionErrorRetryAttempts来设置重试次数,从而实现连接的重置。
四、结论
应用服务基于数据库连接池和数据库之间建立的连接,存在心跳检测和存活状态检测,无论是客户端还是Mysql服务端都会在检测失败之后将连接关闭。当Mysql基于wait_time判断连接并关闭连接后,在客户端的连接池视角中,连接处于无效状态。如果此时有请求进来并获取连接时,如果获取的是无效的连接,将会基于CommunicationsException异常报错提示出来。
五、深入分析
以下内容均基于druid连接池进行说明。
为什么数据库就不能识别出来连接无效,并自动重试呢?其实连接池是支持这种配置的,只是默认是关闭。
5.1、检测无效连接
对于空闲线程可以基于如下配置进行检测
# 启用空闲连接检测机制
druid.testWhileIdle = true
druid.testOnBorrow = false # 默认关闭。获取连接时是否检测连接有效性(影响性能)
druid.testOnReturn = false # 默认关闭。归还连接时是否检测连接有效性(影响性能)
就像上面说的,如果每次获取连接时都进行有效性检测,将会带来性能的消耗,本身连接池就是提效的,每次都检查,性能必然有下降。
5.2、自动重试机制
# 当连接失败时,自动尝试重连
druid.connectionErrorRetryAttempts = 3 # 连接失败时的重试次数
druid.breakAfterAcquireFailure = true # 是否在重试失败后关闭数据源,默认是关闭的
这个配置可以加,不过默认是没配置的。
5.3、回收无效连接
# 空闲连接检测时间间隔
druid.timeBetweenEvictionRunsMillis = 60000 # 60秒执行一次检测
druid.minEvictableIdleTimeMillis = 300000 # 连接空闲超过 5 分钟就进行回收
注意:minEvictableIdleTimeMillis 只对 minIdle(最小空闲连接数) 外的连接生效。
-
minIdle的连接数大于minEvictableIdleTimeMillis设定的空闲时间时,连接池不会立即移除这些空闲连接。minIdle确保了空闲连接的数量,而minEvictableIdleTimeMillis则决定哪些连接可以被清理。 -
如果空闲连接数量已经达到
minIdle,且某些空闲连接的空闲时间超过了minEvictableIdleTimeMillis,这些连接会被清理,而连接池将根据minIdle的要求重新创建新的连接以补充空闲连接数量。
同时Mysql的wait_time对所有连接都生效。所以会出现当应用流量较小时,最小空闲连接会被无效,但是没办法被回收,所以还是需要依赖重试机制。
相关文章:
Mysql的CommunicationsException
一、报错内容 com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 1,500,378 milliseconds ago. The last packet sent successfully to the server was 1,500,378 milliseconds ago. is longer than the s…...
C++学习笔记----9、发现继承的技巧(二)---- 重用目的的继承
现在你对继承的基本语法已经比较熟悉了,是时候探索继承是c语言中重要属性的一个主要原因了。继承是一个装备允许你平衡既有代码。本节会举出基于代码重用目的的继承的例子。 1、WeatherPrediction类 假想你有一个任务,写一个程序来发出简单的天气预报&a…...
锐评 Nodejs 设计模式 - 创建与结构型
本系列文章的思想,都融入了 让 Java 再次伟大 这个全新设计的脚手架产品中,欢迎大家使用。 单例模式与模块系统 Node 的单例模式既特殊又简单——凡是从模块中导出的实例天生就是单例。 // database.js function Database(connect, account, password)…...
【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制
💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…...
15分钟学Go 第4天:Go的基本语法
第4天:基本语法 在这一部分,将讨论Go语言的基本语法,了解其程序结构和基础语句。这将为我们后续的学习打下坚实的基础。 1. Go语言程序结构 Go语言程序的结构相对简单,主要包括: 包声明导入语句函数语句 1.1 包声…...
【Qt】Qt的介绍——Qt的概念、使用Qt Creator新建项目、运行Qt项目、纯代码方式、可视化操作、认识对象模型(对象树)
文章目录 Qt1. Qt的概念2. 使用Qt Creator新建项目3. 运行Qt项目3.1 纯代码方式实现3.2 可视化操作实现 4. 认识对象模型(对象树) Qt 1. Qt的概念 Qt 是一个跨平台的 C 图形用户界面应用程序开发框架。它是软件开发者提供的用于界面开发的程序框架&#…...
论文笔记:PTR: Prompt Tuning with Rules for Text Classification
Abstract 手动设计大量语言提示麻烦且易出错,而自动生成的提示,在非小样本场景下验证其有效性昂贵且耗时。因此,提示调优以处理多类别分类任务仍然具有挑战。为此,本文提出使用规则进行多类别文本分类提示调优(PTR&…...
服务器和中转机协同工作以提高网络安全
服务器和中转机(代理服务器)可以通过多种方式协同工作来提高网络安全。 常见的协同工作策略: 1. 使用代理服务器作为安全网关 访问控制:代理服务器可以作为网络的入口点,实施访问控制策略,如基于IP地址、…...
Java利用itextpdf实现pdf文件生成
前言 最近公司让写一个数据页面生成pdf的功能,找了一些市面代码感觉都太麻烦,就自己综合性整合了一个便捷的工具类,开发只需简单组装数据直接调用即可快速生成pdf文件。望大家一起学习!!! 代码获取方式&am…...
2010年国赛高教杯数学建模C题输油管的布置解题全过程文档及程序
2010年国赛高教杯数学建模 C题 输油管的布置 某油田计划在铁路线一侧建造两家炼油厂,同时在铁路线上增建一个车站,用来运送成品油。由于这种模式具有一定的普遍性,油田设计院希望建立管线建设费用最省的一般数学模型与方法。 1. 针对两炼…...
datawhale大模型bot应用开发--task3:工作流
目录 一、介绍:Coze工作流 1.1工作流应用场景 1.2什么是工作流 1.3思考环节 二、各个工作流详情 2.1情感分类工作流 2.2 随机数工作流 2.3 必应搜索工作流 2.4 天气查询工作流 三、集合上面五个工作流的总工作流 一、介绍:Coze工作流 1.1工作…...
期货配资系统风控逻辑开发/完整源代码
期货配资系统风控逻辑的开发是确保系统安全、稳定、高效运行的关键环节。以下是对期货配资系统风控逻辑开发的详细分析: 一、风险识别与评估 风险来源分析: 市场风险:期货市场价格波动带来的风险。信用风险:投资者或配资方违约的…...
汽车免拆诊断案例 | 2023款零跑C01纯电车后备厢盖无法电动打开和关闭
故障现象 一辆2023款零跑C01纯电车,累计行驶里程约为2万km,车主进厂反映,后备厢盖无法电动打开和关闭。 故障诊断 接车后试车,操作后备厢盖外侧、驾驶人侧及遥控钥匙上的后备厢盖开启按钮,可以听到后备厢盖解锁的…...
分布式存储架构 与分布式一致性协议
分布式存储架构可以分为无中心节点架构和有中心节点架构。它们的设计在系统中的角色分配、数据管理、协调方式等方面有所不同。 1. 无中心节点架构(Decentralized/Peer-to-Peer Architecture) 在无中心节点的分布式存储架构中,所有节点都是…...
Unity Apple Vision Pro 保姆级开发教程 - Simulator 模拟器使用
教程视频 Apple VisionPro Simulator 模拟器使用教程 VsionOS Simulator 简介 visionOS Simulator 是一个用于开发和测试 visionOS 应用程序的工具。它模拟 Apple Vision Pro 的运行环境,帮助开发者在没有硬件设备的情况下创建、调试和优化他们的应用程序。VisionO…...
Vue 之 插件与组件的区别
在 Vue.js 中,插件(Plugin)和组件(Component)都是用来扩展 Vue 功能的重要工具,但它们的应用场景和使用方式有所不同。本文将通过对比的方式,帮助开发者更好地理解两者的区别,并通过…...
了解 ChatGPT 中的公平性问题
了解 ChatGPT 中的公平性问题 最近,OpenAI 又发布了一篇新的博客。他们谈论了一个有趣又重要的话题——用户的身份如何影响 ChatGPT 的回答。 这项研究揭示了一个鲜明的事实,那就是 AI 可能会无意间对人类产生刻板印象。很可能这些刻板印象源自 AI 训练过程中使用的数据,而这…...
【PHP】安装swoole时报错:No package ‘libbrotlienc‘ found
一、环境 Debian 11(bullseye) PHP 8.2.14 Swoole 5.1.4 二、过程 今天在安装Swoole 5.1.4的时候报错,错误信息如下: configure: error: Package requirements (libbrotlienc) were not met:No package libbrotlienc foundConsider adjusting the PK…...
postgresql执行计划解读案例
简介 SQL优化中读懂执行计划尤其重要,以下举例说明在执行计划中常见的参数其所代表的含义。 创建测试数据 -- 创建测试表 drop table if exists customers ; drop table if exists orders ; drop table if exists order_items ; drop table if exists products ;…...
Matlab实现粒子群优化算法优化随机森林算法模型 (PSO-RF)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 粒子群优化算法(PSO)是一种启发式搜索方法,灵感来源于鸟类群体觅食的行为。在PSO中,每个解都是搜索空间中的一个“粒子”,这些粒子以一定的速度飞行&am…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
