博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于MySQL wait_timeout问题记录
阅读量:2502 次
发布时间:2019-05-11

本文共 1171 字,大约阅读时间需要 3 分钟。

问题描述

之前有遇到过MySQL wait_timeout超时问题,主要是因为在使用数据库连接池时,获取到的连接空闲时长由于超过了wait_timeout设置的时间,导致该连接被MySQL服务端释放掉了,最终在使用时产生报错现象。

wait_timeout

先了解下MySQL中的wait_timeout参数

在这里插入图片描述

官网文档中对于wait_timeout参数的一些相关属性已经给出了明确的说明,首先可以看到wait_timeout的默认值是28800秒,也就是当连接空闲时长超过8小时就会自动断开,在非windows环境下,最大可以设置31536000秒,等于365天。

修改wait_timeout默认值

如果你需要修改wait_timeout的时间,可以使用

set wait_timeout = 28800;

也可以修改my.cnf配置,不过我们在上图中可以看到,wait_timeout的作用域有两种,一种是session级别,一种是global级别,而刚才这两种方式的作用域都是session级别的,当服务重启后就会失效,所以要想设置global永久级别的需要通过如下方式执行

set GLOBAL wait_timeout = 28800;

数据库连接池

除了通过修改wait_timeout配置外,一般还是通过合理的配置数据库连接池参数来避免wait_timeout的问题,比如以druid连接池为例(其他连接池也是类似的),可以使用如下配置。

spring.datasource.validationQuery=SELECT 1spring.datasource.testWhileIdle=truespring.datasource.testOnBorrow=falsespring.datasource.timeBetweenEvictionRunsMillis=60000spring.datasource.minEvictableIdleTimeMillis=1800000

这段配置的含义如下:当testWhileIdle为true(默认true),应用向连接池申请连接并且testOnBorrow为false时,连接池将会判断取出的连接是否处于空闲状态,如果是,则使用SELECT 1验证这条连接是否可用,对于连接是否处于空闲状态则通过timeBetweenEvictionRunsMillis参数为依据,如果空闲时间超过timeBetweenEvictionRunsMillis设置的值(默认1分钟),则会验证一下连接有效性,如果空闲时间超过了minEvictableIdleTimeMillis的值(默认30分钟),则会直接剔除。

通过验证连接有效性的方式,避免了从连接池中获取了已经被MySQL服务端释放掉的连接。

转载地址:http://bmlrb.baihongyu.com/

你可能感兴趣的文章
JS中原型链的理解
查看>>
oracle服务器和客户端字符集的查看和修改
查看>>
搭建服务器Apache+PHP+MySql需要注意的问题
查看>>
看完此文再不懂区块链算我输,用Python从零开始创建区块链
查看>>
C/S框架-WebService架构用户凭证(令牌)解决方案
查看>>
UVA 11149.Power of Matrix-矩阵快速幂倍增
查看>>
ajax post 请求415\ 400 错误
查看>>
jq关于对象类型的判断
查看>>
python--Websocket实现, 加密 sha1,base64
查看>>
c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程
查看>>
洛谷 2921 记忆化搜索 tarjan 基环外向树
查看>>
0910
查看>>
IISExpress Log 文件路径
查看>>
P2787 语文1(chin1)- 理理思维
查看>>
Xshell配置ssh免密码登录-密钥公钥(Public key)
查看>>
2012年1月份第2周51Aspx源码发布详情
查看>>
PHP第三天!!黑人无表情 面向对象的特点等等!!
查看>>
2013年7月份第4周51Aspx源码发布详情
查看>>
Binary Tree Serialization and Deserialization
查看>>
使用 CSS 用户选择控制选择
查看>>