MySql数据库连接超时处理
博主在做web开发时遇到MySql数据库连接超时的问题。
控制台报错如下:
Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 1 ms ago.
由于用到了spring+mybatis的框架,刚开始以为是mybatis引起的,后来才发现是MySql数据库连接超时。
这个异常是由于MySQL服务再长时间不连接之后断开了,断开之后的首次请求会抛出异常。那么既然是超时问题,就要去探究一下Mysql连接时间是怎么控制的。打开Mysql的控制台,运行:show variables like '%timeout%'; ,查看和连接时间有关的Mysql系统变量,如图:
其中wait_timeout就是负责超时控制的遍历,其时间为长度28800s,就是8个小时,那么就是说Mysql的服务会在操作间隔8小时后断开,需要再次重连。
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。
Mysql的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。Linux系统下的配置文件为/etc/my.cnf,windows下在[MySQL_HOME]/bin下的mysql.ini。
修改之后保存退出,重启mysql服务。
如果不修改mysql的配置,需要直接在spring-mybatis的配置文件中实现,可以采用以下的方式:
<bean id="mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${mysql_driver}"/><property name="url" value="${mysql_url}"/><property name="username" value="${mysql_username}"/><property name="password" value="${mysql_password}"/><property name="validationQuery" value="SELECT 1"/><property name="testOnBorrow" value="true"/></bean>
如上面代码所示,dirverClassName,url,username,password是数据库的连接配置,都很常见。关键是validationQuery和testOnBorrow两个参数。Spring建议使用的数据源有Apache的DBCP和C3P0,这里使用的是DBCP,前面四个参数是基本参数,而后面两个参数是连接健康情况的参数,如下图所示:
添加了validationQuery和testOnBorrow两个参数可以保证在mysql服务长时间不连接断开之后的请求不会出现异常情况,当然也可以在配置文件中将testOnReturn等之类的配置加上。
MySql数据库连接超时处理相关推荐
- 解决mysql数据库连接超时问题
前段时间部署在服务器上的网站遇到一个问题:当较长时间没有去访问网站,再次打开时就会报一个数据库连接失败的错误,不管是用ssh开发的项目还是ssm开发的项目,都有这个问题.本篇博客记录这个问题的原因与解 ...
- MySQL数据库连接超时(wait_timeout)问题的处理
想必大家在用MySQL时都会遇到连接超时的问题,如下图所示: 就是这个异常(com.mysql.jdbc.exceptions.jdbc4.CommunicationsException ...
- mysql 数据库连接超时时间查询、修改
查询连接超时时间 SHOW [GLOBAL] VARIABLES LIKE '%timeout%'; 查询所有带 timeout 的变量. 带[GLOBAL] 参数时,查询全局变量,不带[GLOBAL ...
- 添加MySql数据库超时设置的相关问题
最近在工作中, 遇到MySql数据库连接超时的问题,申同事帮忙解决了一下,看到原来的MySqlHelper里面没有封装相关的超时方法,就添加了一个,我在这里记录了一下,希望对像我一样入门级的程序员有所 ...
- mysql与oracle链接超时_数据库连接超时问题(求解)
问题出现的背景: APP框架,生产者和消费者模式,数据源配置包括mysql(mysql的分支maria DB)的数据源和oracle. 问题描述: 初始化时注册c3p0没有问题,在第一次使用数据库连接 ...
- MySQL连接问题【如何解决MySQL连接超时关闭】
--MySQL连接问题[如何解决MySQL连接超时关闭] ------------------------------------------------转载 最近做网站有一个站要用到WEB网页采集器 ...
- mysql数据库连接过多的错误,可能的原因分析及解决办法
mysql数据库连接过多的错误,可能的原因分析及解决办法 来源:网络采集 作者:未知 系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是 ...
- mysql 设置连接超时_如何配置MySQL数据库超时设置
最近备战京东双11,在配置MySQL的超时配置发现有很多地方可以设置.这么多超时的配置有什么影响,以及配置会有什么影响呢?今天的文章就让我来大家来分析一下. 1. JDBC超时设置 connectTi ...
- MySql连接超时引起的生产故障
吃饭期间,忽然收到线上告警,排查原因发现是数据库连接超时. 于是联系DBA,一番排查下来数据库的Master节点的宿主机出现了故障. 主从切换后,告警还没回复,业务不可用,继续看链路跟踪日志. 找链路 ...
最新文章
- 谷歌最新开源BundleTrack: 无需任何CAD模型的6D物体姿态跟踪算法
- 如何看懂照片的直方图
- Cissp-【第4章 通信与网络安全】-2021-3-12(377页-392页)
- httpd反代 + tomcat cluster + redis会话保持
- chrome 获取剪贴板内容_Chrome 开发者工具的11 个高级使用技巧
- Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题
- tensorflow2 tensorboard可视化使用
- Linux MTD子系统 _从模型分析到Flash驱动模板
- 针对视觉位姿估计特征点优化问题的详细研究
- 3 编程基础 Makefile
- JavaScript : 基本的处理事件
- 数据特征分析方法总结
- 地图开发中用到的比例尺和分辨率
- 车架号校验 php代码,VIN车辆识别代码查询(精准版)
- 100 位测试工程师的 2018 年度关键词与 2019 展望
- 蓝凌OA前台任意文件读取漏洞利用
- 调用微信二维码识别开源库
- SLIC 简单线性迭代聚类
- 小小甜菜深度学习爬坑记
- 硬件知识:电源开关上的“1“和“0“分别是什么意思