MySQL5.6数据库8小时内无请求自动断开连接

2023-10-29

问题:

最近的项目中,发现Mysql数据库在8个小时内,没有请求时,会自动断开连接,这是MySQL服务器的问题。
The last packet successfully received from the server was 1,836,166 milliseconds ago.  The last packet sent successfully to the server was 29,134 milliseconds ago.

 

原因:


MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,

而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。


解决方案:
数据库连接如果空闲时,进行有效性验证。(如果使用连接池,配置几个属性即可)

 

<!-- 解决长时间不连接,连接失败问题 -->
    <property name="testOnBorrow" value="true"></property>
    <property name="testOnReturn" value="true"></property>
    <property name="testWhileIdle" value="true"></property>
    <property name="validationQuery" value="SELECT 1 FROM DUAL"></property>

 

Oracle数据库:SELECT 1 FROM DUAL

SqlServer数据库:SELECT 1

 

 

下面以DBCP连接池举例——

(其他连接池应该也都有以下属性,可以查看文档或源码),下图是我的项目的连接池的源码举例:

 



在DBCP连接池中有以下几个属性:

 


testOnBorrow、testOnReturn、testWhileIdle,他们的意思是当是取得连接、返回连接或连接空闲时是否进行有效性验证(即是否还和数据库连通的),默认都为false。所以当数据库连接因为某种原因断掉后,再从连接池中取得的连接,实际上可能是无效的连接了,所以,为了确保取得的连接是有效的,可以把把这些属性设为true。当进行校验时,需要另一个参数:validationQuery,对oracle来说,可以是:SELECT COUNT(*) FROM DUAL,实际上就是个简单的SQL语句,验证时,就是把这个SQL语句在数据库上跑一下而已,如果连接正常的,当然就有结果返回了。 

然后minEvictableIdleTimeMillis配合timeBetweenEvictionRunsMillis,每过timeBetweenEvictionRunsMillis秒对连接池进行一次检测,将对象闲置时间超过minEvictableIdleTimeMillis秒的对象进行销毁,创建新的对象来取代。这样就能保证时刻都有正常的连接池对象存在。

 

 

还有其他的一些参数,可以参考源代码。 
部分参数简要说明: 
removeAbandoned :是否自动回收超时连接 
removeAbandonedTimeout:超时时间(以秒数为单位) 
removeAbandoned=true那么在getNumActive()快要到getMaxActive()的时候,系统会进行无效的Connection的回收,回收的Connection为removeAbandonedTimeout(默认300秒)中设置的秒数后没有使用的Connection 
logAbandoned:logAbandoned=true的话,将会在回收事件后,在log中打印出回收Connection的错误信息,包括在哪个地方用了Connection却忘记关闭了,在调试的时候很有用。 
maxWait:超时等待时间以毫秒为单位 
maxIdle:最大空闲连接 
minIdle:最小空闲连接 
maxActive:最大连接数 
testOnBorrow、testOnReturn、testWhileIdle、validationQuery:上面有介绍 
另外很重要的一点是每次连接使用完了不要忘了调用connection.close()使连接返回到连接池

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL5.6数据库8小时内无请求自动断开连接 的相关文章

  • Transformers学习笔记4

    Tokenizer nlp任务的输入都是raw text model的输入需要是inputs id 所以tokenzier将句子转换成inputs id 怎么转换呢 有3种方式 word based split the text 按照空格来
  • Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量

    目录 一 Iperf能做什么 1 TCP方面 2 UDP方面 二 Iperf的安装与使用 1 安装iperf 2 iperf参数介绍 三 Iperf应用实例 1 测试TCP吞吐量 2 测试UDP丢包和延迟 四 利用IXCHARIOT进行网络

随机推荐

  • 大规模线性方程组求解

    常将线性方程组表示为 A x b A为已知N N的矩阵 通常称为刚度矩阵 刚度是力学中的概念 电磁 热等也习惯性这么称呼 b为已知向量 x为待求向量 解线性方程组的操作基本围绕矩阵A展开 首先介绍一些相关术语 1 矩阵条件数 条件数是一个表
  • json.dump(json_obj, f, ensure_ascii=False),报错UnicodeEncodeError: ‘gbk‘ codec can‘t encode character

    python报错json文件时报错 json dump json obj f ensure ascii False 报错UnicodeEncodeError gbk codec can t encode character 这个错误是因为在
  • transition-group过渡动画

    安装lodash库 cnpm install lodash S 安装lodash type cnpm install types lodash D
  • TAP 系列文章4

    基于Backstage的开发者门户 随着云原生的理念和技术逐渐深入人心 很多企业都在思考和实践如何落地 实实在在地达成云原生所承诺的目标 使工程师能够轻松地对系统作出频繁和可预测的重大变更 越来越多的企业认识到 以Kubernetes为代表
  • 微软1G网盘注册方法

    微软提供免费网盘 可作外链 可用迅雷 很好的存储地方 拥有1G的空间 单个文件限制大小为50MB 支持外链 需要传到Public folders里面 支持迅雷下载 经过我本人测试 下载速度还是蛮快的 能达到180k每秒 不过跟其他国内的网盘
  • vue整理笔记(二)

    前言 上次整理到vue的项目创建 这次就来说说vue的单文件组件创建 1 Vue 组件 1 通过命令 vue init webpack 项目名 创建一个项目 例子 vue create vue2 demo 2 打开src的文件夹 打开com
  • linux cat命令详解

    cat命令 1 cat linux txt 查看linux txt内容 2 cat n linux txt 查看linux txt文件的内容 并且由1开始对所有输出行进行编号 包括空白行 3 cat b linux txt 用法和 n 差不
  • 自己写的制作 city的语义分割tfrecord 适用于deeplabv3+

    自己写的制作 city的语义分割tfrecord 适用于deeplabv3 自用 Converts PASCAL dataset to TFRecords file format from future import absolute im
  • Python 使用 Scrapy 发送 post 请求的坑

    From https www jb51 net article 146769 htm 使用 requests 发送 post 请求 先来看看使用requests来发送post请求是多少好用 发送请求 Requests 简便的 API 意味着
  • 如何在win10上搭建本地服务器

    win10上搭建本地服务器 1 在我的电脑上 打开控制面板 2点击程序和功能 启用关闭windows功能 3 选择如下功能 4 点击确定 打开iis管理器 右键电脑 选择管理 5 找到这个 6 选择浏览网站 成功
  • linux 内存分配

    内存管理 一 malloc的底层实现 Malloc函数用于动态分配内存 为了减少内存碎片和系统调用的开销 malloc其采用内存池的方式 先申请大块内存作为堆区 然后将堆区分为多个内存块 以块作为内存管理的基本单位 当用户申请内存时 直接从
  • 信息增益计算和决策树生长过程

    信息增益计算和决策树生长过程 给定训练集S 下面以信息增益作为最佳划分的标准 演示信息增益的计算和决策树生长的过程 根节点 1 以 Outlook 被选做划分属性 总共有14条数据 打球9条 不打球的5条 根据Outlook进行划分 Sun
  • SonrLint常见解决方案

    Sonar是什么 Sonar是一个用于代码质量管理的开源平台 用于管理源代码的质量 通过插件形式 可以支持包括java C C C PL SQL Cobol JavaScrip Groovy等等二十几种编程语言的代码质量管理与检测 Sona
  • token不存在问题

    解决 添加一个token鉴权的请求头 注意 要在在缺少的文件添加该代码 const token localStorage getItem TOKEN
  • vector subscript out of range数组下标越界错误

    在使用vector二维数组时 产生 vector subscript out of range 错误 检查之 后并没有发现数组下标越界问题 百度了一下 发现原来是数组并没有初始化 赋值 没有分配空间 所以不能采用下标的方式进行访问 解决方法
  • antd 2.2.8 版本 Form表单使用useForm带星号校验和带星号不校验的写法以及不带星号不校验的写法

    1 带星号且校验
  • 02 Elasticsearch基本常用命令详解

    IK分词器 分词 把一段中文或者词组划分成一个个关键字 我们在搜索的时候会把自己的信息进行拆分 会把数据库中或者索引库中的数据进行分词 然后进行一个个匹配操作 默认的中文分词是将每一个看成一个词 比如 我爱王军 会被拆分成 我 爱 王 军
  • SSM框架下的学生管理系统--序言

    先开个博 占个坑 也是督促自己尽快提上日程 这是为初学者写的一个系列性的文章 我会不断更新 希望看到文章的人能有所收获 简单介绍下SSM 第一个S指的是Spring 第二个S指的是SpringMVC 最后一个M指的是Mybatis 我们这个
  • c++ 入门基础(一)

    第一个c 程序 include
  • MySQL5.6数据库8小时内无请求自动断开连接

    问题 最近的项目中 发现Mysql数据库在8个小时内 没有请求时 会自动断开连接 这是MySQL服务器的问题 The last packet successfully received from the server was 1 836 1