The last packet successfully received from the server was x milliseconds ago解决方案

遇到这个问题查阅很多博客,基本上大同小异,但是都于事无补。

参考文章:https://blog.csdn.net/frankcheng5143/article/details/50589264 可以移步到此查看。

网上的方案:

1.将mysql服务器的wait_timeout设置为无穷大,保证永不超时(不知道可以不,不建议采用(事实上没什么用,有文章说对5.0之前的mysql适用),像这样

set global wait_timeout=28800;

2.根据提示自动重连将autoReconnect=true添加到数据库链接的代码中,像这样

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false

3.在mysql的wait_timeout时间之内发一次心跳,保证连接的有效性

4.在使用的时候检测连接的有效性,失效就获取一个新的连接

 

方案1和方案2基本上没用,或者说独立设置这些参数基本没用,需要结合其他参数;但是搜索到的很多博客上的文章都是围绕1,2来说,设置之后可以说一点用都没有,对重要参数idleConnectionTestPeriod只字未提。

官方建议采用第三种方式

将testConnectionOnCheckout 设为 false
将testConnectionOnCheckin 设为 true
将idleConnectionTestPeriod 设为 30,单位是秒不是毫秒,这个数字要根据项目情况设定,比8小时小就好,我设置为90

项目完整配置

jdbc.jdbcUrl = jdbc:mysql://117.*.*.*:9966/databasename?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.user = root
jdbc.password = root
jdbc.miniPoolSize = 1
jdbc.maxPoolSize = 100
jdbc.initialPoolSize = 1
jdbc.maxIdleTime = 3600
jdbc.acquireIncrement = 1

jdbc.acquireRetryAttempts = 30
jdbc.acquireRetryDelay = 1000
jdbc.testConnectionOnCheckout=false
jdbc.testConnectionOnCheckin = true
jdbc.automaticTestTable = c3p0TestTable
#敲黑板,idleConnectionTestPeriod设置如果过大就会引起本文要说的问题,可以设置为10000在本地测试一下
jdbc.idleConnectionTestPeriod = 90
jdbc.checkoutTimeout=30000

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL报错"The last packet successfully received from the server was X milliseconds ago"时,这通常是由于连接超时引起的。解决这个问题的方法有以下几种: 1. 检查网络连接:首先确保网络连接正常,可以尝试使用其他网络连接或者重启网络设备。 2. 调整连接超时时间:可以通过修改MySQL配置文件中的"wait_timeout"参数来增加连接超时时间。该参数表示MySQL服务器在没有活动连接的情况下等待的时间,默认为8小时。可以将其增加到更大的值,例如设置为28800(8小时)。 3. 优化查询性能:如果查询语句执行时间过长,可能会导致连接超时。可以通过优化查询语句、创建索引、调整数据库结构等方式来提高查询性能,减少连接超时的可能性。 4. 增加服务器资源:如果服务器资源不足,可能会导致连接超时。可以考虑增加服务器的内存、CPU等资源,以提高服务器的处理能力。 5. 使用长连接:长连接是指在一个连接上可以执行多个查询,而不是每次查询都建立一个新的连接。使用长连接可以减少连接建立和断开的开销,降低连接超时的可能性。 6. 检查防火墙设置:有时防火墙设置可能会导致连接超时。确保防火墙没有阻止MySQL服务器的访问。 希望以上方法能够帮助您解决MySQL报错"The last packet successfully received from the server was X milliseconds ago"的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值