【MySQL之轨迹】The last packet successfully received from the server was xxx milliseconds ago 连接超过 8 小时失效

spring boot整合mybatis报错 报错内容: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 1,091 milliseconds ago. The last packet sent succe... 阅读详情
AI摘要

当数据库连接闲置超过8小时,MySQL会自动断开连接,导致CommunicationsException等异常。解决方法包括延长`wait_timeout`配置或在使用前检查连接是否失效。通过记录连接创建时间并比较当前时间,若超过设定阈值(如4小时),则刷新数据库连接池。

产生源头

数据库连接池中的连接长时间空闲着(出现在数据库连接闲置一夜或者小网站长时间无人访问)超过了 8 小时,MySQL 会自动将其断开,连接失效,但这时数据库连接池并不知道,依旧使用,就出现了异常,总的来说有:

CommunicationsException: Communications link failure 连接失效
Broken pipe (Write failed) 连接损坏
MySQLNonTransientConnectionException: No operations allowed after connection closed 在连接关闭后依旧操作

◉ 查看连接状态

使用 show processlist 查看连接状态时:
在这里插入图片描述

注意到表中的 Time 这一栏,是数据库存在的时间
其单位是 秒(s),默认最长时间为 8 小时,也就是 28800 秒,超过这个时间连接将失效


◉ 解决过程:

查了很多网上的做法,就是将失效时间修改得长一点
默认的 wait_timeout 值为 28800 ,改动它可以让连接活得久一点

但个人感觉这并不是好办法,如果能在连接失效时检查出来,再替换成新的连接,不就解决问题了吗


失败方法:
过程中我使用了数据库连接 Connection 的 isClosed() 方法,却发现这并不能检查出是否失效,这是因为该连接并没有被关闭,只是失效了而已,之后又使用了 isValid() ,很遗憾同样不生效

解决方法:
既然连接的关闭依赖的是时间,那就将连接创建时的时间记录下来
而后在每次使用前检查该连接到现在的时间差,是否超过 8 个小时
如果大于 8 小时,则将数据库连接池中的连接清空,重新换一批新的

下面以 4 小时为例子:

private final List<Connection> connPool = new LinkedList<>();
private int maxFreeConnections = 10;
private long lastTime;
private static final int OVER_TIME = 4 * 60 * 60;

@Override
public Connection getConnection() throws SQLException {
    // 比较时间,若超时则替换连接池连接
    if (Instant.now().getEpochSecond() - lastTime > OVER_TIME) {
        poolLogger.info("连接超时了,重新获取 10 个连接");
        clearPool();
        initPool();
    }

    // 如果连接池为空,新建连接
    if (connPool.isEmpty()) {
        poolLogger.info("连接池空了,再新建 10 个连接");
        initPool();
    }

    // 给出一个有效数据库连接
    poolLogger.info("给出了一个连接,目前剩余连接数:" + (connPool.size()-1) +
            " (该批连接持续服务时间:"+ (Instant.now().getEpochSecond() - lastTime) +" / "+ OVER_TIME +" s)");
    return connPool.remove(0);
}

@Override
public void initPool() throws SQLException {
    // 获取数据库连接并放入数据库连接池中
    for (int i = 0; i < maxFreeConnections; i++) {
        connPool.add(DriverManager.getConnection(URL, USER, PASSWORD));
    }

    // 更新此次的连接时间
    lastTime = Instant.now().getEpochSecond();
    poolLogger.info("新开了 10 个数据库连接");
}

@Override
public void clearPool() throws SQLException {
    // 关闭连接池中的数据库连接
    for (Connection conn : connPool) {
        conn.close();
    }

    // 最后清空连接池
    connPool.clear();
}

该数据库连接池为手写简陋版,其它数据库连接池不知道怎样,仅供参考
一次性更新整个连接池还是有点亏,再考虑优化吧 op


风雨兼程,奔赴我的远方(IceClean)

springboot hikari数据库连接池死链 出现异常 最近用户反应系统很慢,登录时,经常超时、无反应,查看log出现上述两种异常, 异常情况1 The last packet successfully received from the server was 995,202 milliseconds ago. The last packet sent successfully to the server was 995,202 milliseconds ago. at com.mysql.cj.jdbc.exceptions.SQLError.crea 阅读详情

相关推荐

The last packet successfully received from the server was 4,758 milliseconds ago

Thelastpacketsuccessfullyreceivedfromtheserverwas4,758millisecondsago.Thelastpacketsentsuccessfullytotheserverwas4,758millisecon dsago.;nestedexceptioniscom.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communicationslin...

隔壁老瓦的专栏 2422

使用连接池druid报错The last packet successfully received from the server was XXX milliseconds ago.(实测解决)

跑定时任务执行sql脚本的时候,sql的复杂度特别大,又不想优化,客户端跑需要10几秒,在druid连接池中跑任务就报上面的错误了。

偶尔写些东西,意思一下我也参与了内卷 3万+

给IC设计新人的Tessent Scan入门指南:从RTL到ATPG的完整DFT流程解析

本文为IC设计新手提供Tessent Scan的完整DFT流程指南,从RTL代码检查到ATPG测试向量生成,详细解析扫描链配置、插入及验证的关键步骤。通过实战案例和工具命令示例,帮助工程师快速掌握Tessent工具链的应用技巧,提升芯片可测试性设计的效率和质量。

weixin_32541663的博客 451

深度解析数据库连接The last packet successfully received from the server was *xxx* milliseconds ago

相信很多人都遇到过这个问题,看到提示信息,或许大家都明白这不就是获取到的数据库连接超时了嘛,没错,问题的本质也的确如此,常见的解决办法也很简单,比如说从数据库连接池中获取连接的时候判断下连接状态是否正常,这样就可以避免此类问题的发生,如果都是此问题,那么就不会再有本文来赘述问题和解决方案,下面一起来看看造成该问题的几个原因和解决方法。 1.从连接池获取到超时的连接 从数据库连接池获取到超时的连接,目前这种情况大多数数据库连接池中间件都有相应的处理策略,一种是定期扫描连接池中的连接,探测到失效连接后剔除功能,

雨潇的专栏 3万+

为什么大语言模型推理要分成 Prefill 和 Decode?深入理解这两个阶段的真正意义

Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。

Harry的博客 1万+

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入探讨了SAP CO模块中KKA2和CJ88结果分析码在项目收入成本匹配中的高阶应用。通过真实案例解析,详细介绍了这两种分析码在分阶段收入确认和终验法项目中的配置技巧与实战经验,帮助财务人员高效解决复杂业务场景下的财务数据处理难题。

weixin_29230773的博客 168

windows解决:mysql连接报错“The last packet successfully received from the server was xxx milliseconds ago”.

在系统目录下找到my.ini配置文件,以记事本方式打开。最后以管理员身份打开命令窗口,重启mysql服务即可。然后找到[mysqld]将下面两句添加上去,保存。

dd_ddesd的博客 1万+

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 5569

数据库连接超时:“The last packet successfully received from the server was xxx milliseconds ago”...

产生的原因:应用方的数据库连接有效期时间,大于数据库自己设置的有效期。 解决方案: 一、修改druid配置(如果使用druid的话) spring.datasource.druid.validationQuery=select 1 spring.datasource.druid.testWhileIdle=true spring.datasource.druid.te...

weixin_30770783的博客 1万+

深入解析fio Benchmark测试:从源码到实践

本文深入解析fio Benchmark测试工具,从入门指南到源码架构分析,详细介绍了其核心模块、关键数据结构和I/O处理机制。通过实战案例展示如何优化存储性能测试,包括内存对齐、多线程调优等技巧,帮助开发者充分利用fio进行精准的存储性能评估。

weixin_42563415的博客 208

手机拍视频就能训练机器人?SpatialLM开源模型实战指南(附HuggingFace部署教程)

本文详细介绍了如何利用开源模型SpatialLM通过手机视频训练机器人理解3D空间结构。从HuggingFace部署、视频预处理到模型推理和结果可视化,提供完整的实战指南,特别适合具身智能领域的开发者快速上手。

2y3u4i5o6p的博客 788

The last packet successfully received from the server was 8 milliseconds ago.

最近接手了一个SpringBoot+Mybatis+Mysql的JAVA爬虫项目,在爬取并解析完数据之后准备存入数据库时遇到了一个以前没有见过的报错,网上方案众多且不一定有效。记录一下自己解决这个BUG的爬坑过程。 报错信息: org.springframework.dao.RecoverableDataAccessException: ### Error querying database. ...

yaheng100的博客 2万+

06 - 深度学习处理器原理

深度学习处理器的重要性在于它们可以加速深度学习任务的执行,从而推动了人工智能的发展。传统的通用处理器虽然可以执行深度学习任务,但它们不够高效,需要消耗大量的能量和时间。深度学习处理器通过硬件加速和特定设计来优化深度学习任务的执行,从而可以提高执行效率、降低能耗和加速训练和推断过程。 深度学习处理器的发展也推动了深度学习算法的创新,因为算法的发展需要硬件的支持和驱动。同时,深度学习处理器的出现也促进了更广泛的应用场景,包括自动驾驶、人脸识别、语音识别、图像识别等领域。因此,深度学习处理器的重要性不仅在于加速

m0_51339444的博客 752

mysql链接错误The last packet successfully received from the server was xxx milliseconds ago解决方案

线上项目偶尔出现错误,这个错误发现是在项目无人操作一段时间后就产生,如果有人操作,那就不会出现。

weixin_44487203的博客 2万+

组建高效AI开发团队:角色、技能与协作

在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的核心驱动力。组建高效的AI开发团队对于企业和科研机构来说至关重要,它能够推动创新、提高竞争力、实现业务目标。本文的目的在于为那些希望组建或优化AI开发团队的管理者、技术负责人以及相关从业者提供全面的指导。范围涵盖了团队角色的定义、所需技能的分析、团队协作的策略,以及实际项目中的应用和相关资源的推荐。本文将首先介绍AI开发团队的核心概念与联系,包括团队角色、技能和协作之间的关系。接着阐述核心算法原理和具体操作步骤,结合数学模型和公式进行详细讲解。

2502_91592937的博客 995

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题

解决 'The last packet successfully received from the server was xxx milliseconds ago' 问题

一只没有脚的鸟 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HikariPool-1 - Exception during pool initialization

Nacos配置中心的连接数据库文件yml: 后启动报错: 解决方案:url后加上useSSL=false SSL协议提供服务主要: 1)认证用户服务器,确保数据发送到正确的服务器;    . 2)加密数据,防止数据传输途中被窃取使用; 3)维护数据完整性,验证数据在传输过程中是否丢失; 当前支持SSL协议两层: SSL记录协议(SSL Record Protocol):建立靠传输协议(TCP)高层协议提供数据封装、压缩、加密等基本功能支持 SSL握手协议(SSL Handshake Protoc

weixin_42594968的博客 1086

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

彻底解决"The last packet successfully received from the server was * milliseconds ago"问题

1.修改mysql 的 wait_timeout参数(和interactive_timeout一起) 不推荐 2.如果用hibernate.必须手动配置连接池,最好是用c3p0连接池。如果不配,会使用内置连接池。内置连接池的8小时断开问题不知道hibernate开发者怎么还不解决! 3.干脆不用hibernate,spring的jdbc template+自己配连接池就非常好。

待风宜月 3万+

JDBC连接MySQL错误分析

The last packet successfully received from the server was 2,999,795 milliseconds ago. The last packet sent successfully to the server was 2,999,797 milliseconds ago.

大数据知识梳理 1032

记录启动springboot时mysql报错:The last packet successfully received from the server was 3,023 milliseconds

遇到报错这个问题,网上找原因,大概都是说:应用方的数据库连接有效期时间,大于数据库自己设置的有效期。 而网上的解决方案,大致就是以下几种:(但是我尝试后发现都不行) 一、增加配置检测连接是否可用 spring.datasource.druid.validationQuery=select 1 spring.datasource.druid.testWhileIdle=true spring.datasource.druid.testOnBorrow=true spring.datasource.druid.

weixin_43769566的博客 4823

记一次mysql数据库超时分析和优化

记一次mysql数据库超时分析和优化

ffyyhh995511的专栏 1097

mysql连接池报错:The last packet successfully received from the server was XXXXX milliseconds ago

具体报错信息 0:Communications link failure The last packet successfully received from the server was 87,537,289 milliseconds ago. The last packet sent successfully to the 报错日志解释 从服务器成功接收的最后一个数据包是87,537,289(24.3小时)毫秒前。最后一个成功发送到服务器的数据包是0毫秒前。说明这个连接已经24个小时没有从服务器上接

诸葛小猿 2万+

The last packet successfully received from the server was xx milliseconds ago. The last packet sent

同组同事遇到的问题。 完成异常信息如下: The last packet successfully received from the server was xxx milliseconds ago. The last packet sent successfully to the server was xxx milliseconds ago. ### Error querying d...

【欢迎关注公众号:冬瓜白】 4743

MySQL数据库提示:Communications link failure,The last packet successfully received...

       Last modified:2013-10-08 14:16:47      **********************************************         web网站使用MySQL数据库,今天突然报以下错误:       Communications link failure,The last packet successfully re...

苳眠の菜鸟 8899

Mysql解决java数据库链接失效问题The last packet successfully received from the server was 3 milliseconds ago错误

[Mysql+JAVA+druid] 解决java链接mysql报The last packet successfully received from the server was 3 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago.错误   触发现象 第一次调用报上图错误,第二次恢复正常。   引起原因 查询数据库wait_timeout(服务器关闭非交

qq_36615278的博客 1万+

The last packet successfully received from the server was 4 milliseconds ago.

它表明 JDBC 客户端与 MySQL 数据库服务器之间的通信链接在某个点突然中断,但在错误消息给出的时间点,客户端和服务器之间仍然有数据包交换的记录。1、在配置文件my.cnf中设置max_connections的值(重启后生效)找到max_connections一行,修改为(如果没有,则自己添加)报这个错误大多数是因为数据库连接的问题,有可能网络,有可能连接数。(最大连接数,这个参数实际起作用的最大值为16384)###2、修改临时连接数(不需要重启mysql)说明连接已经满了,3000满足不了需求。

qq_37144511的博客 2360
上一篇: 【MySQL之轨迹】too many connections 解决(查看与关闭数据库连接)
下一篇: 【MySQL之轨迹】Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冰小澈IceClean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值