防止连接Mysql超时,JDBC探活配置

我们知道Mysql有两个关于连接超时的参数,默认为8小时:

MySQL > show global variables like '%timeout%';

wait_timeout = 28800

非交互连接等待时间

interactive_timeout = 28800

交互连接等待时间

MySQL > show processlist;

当connection空闲(Sleep)超过8小时,Mysql将自动断开该connection,而JDBC连接池并不知道该connection已经失效,如果这时有Client请求connection,JDBC将该失效的Connection提供给Client,将会造成异常。

一般会有5种处理方式:

1、MYSQL调大数据库超时参数:如果太大,可能导致连接数较多,引起性能下降

set global wait_timeout = 2073600;
set global interactive_timeout = 2073600;

2、JDBC配置Mysql连接URL重连机制

jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true

3、JDBC减少连接池内连接生存周期:使之小于所设置的wait_timeout 的值

<property name="maxIdleTime" value="1800" />   

4、JDBC探活:每隔一段时间唤醒连接

<property name="preferredTestQuery" value="SELECT 1"/> 
<property name="idleConnectionTestPeriod" value="300"/>

5、JDBC升级驱动版本

由于老版本有些功能不兼容,导致连接报错,可以升级到最新版本后再观察

下载地址:https://dev.mysql.com/downloads/connector/j/

JDBC主要参数说明:

<!--IP端口库用户密码等-->  
<property name="jdbcUrl">
<property name="user">
<property name="password">
<!--连接池中保留的最小连接数。-->   
<property name="minPoolSize" value="5" />   
<!--连接池中保留的最大连接数。Default: 15 -->   
<property name="maxPoolSize" value="20" />   
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->   
<property name="maxIdleTime" value="1800" />   
<!--当连接池中的连接耗尽的时候,一次同时获取的连接数。Default: 3 -->   
<property name="acquireIncrement" value="2" />   
<property name="maxStatements" value="1000" />   
<property name="initialPoolSize" value="10" />   
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->   
<property name="acquireRetryAttempts" value="30" />   
<property name="breakAfterAcquireFailure" value="true" />   
<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下select 1显著提高测试速度,比默认语句SHOW FULL TABLES FROM `dbname` LIKE 'PROBABLYNOT'效率高很多 -->
<property name="preferredTestQuery" value="SELECT 1"/> 
<!--每300秒检查所有连接池中的空闲连接。Default: 0 -->      
<property name="idleConnectionTestPeriod" value="300"/> 
<!--每次把连接checkin到pool时,测试其有效性 --> 
<property name="testConnectionOnCheckin" value="false"/>  
<!--每次把连接从pool内checkout时,测试其有效性 --> 
<property name="testConnectionOnCheckout" value="false"/>
<!--上面两个参数如果为true那么每个connection提交时都会校验其有效性,会造成至少多一倍的数据库调用,性能消耗较大,慎重使用,建议使用 idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能 --> 

其他参数:

更多参数解读:

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

原文发布于微信公众号 - MYSQL轻松学(learnmysql)

原文发表时间:2018-01-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

高性能配置中心 duic - 设计&实现

配置(Configuration)对于技术人员来说应该都不陌生,通常配置都是以 key-value 的形式存在于配置文件当中。例如线程池大小、数据库连接、逻辑开...

1053
来自专栏容器云生态

heartbeat+lvs构建高可用负载均衡集群

heartbeat+lvs实现高可用负载均衡原理: 两台heartbeat(ldirectord)主机构成高可用集群,同时监管着lvs(负载均衡集群)整体构成了...

23510
来自专栏云计算教程系列

如何在CentOS 7上配置Apache内容缓存

缓存是一种通过允许更快访问的方式临时存储共同请求的内容来提高服务器性能的方法。通过减少一些资源密集型操作来加速处理和交付。

520
来自专栏smy

webapp开发调试环境--weinre配置

    用谷歌调试工具中的手机模拟器模拟手机进行webapp的开发,与真机上的效果还是有些偏差,opera手机模拟器的效果亦不佳。有时在pc上开发出来的web...

34710
来自专栏散尽浮华

Nginx+upstream针对后端服务器容错的运维笔记

熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一、nginx的upstr...

5209
来自专栏java思维导图

开源项目renren-fast解读,让java不再难懂(一)

node.js安装教程:http://nodejs.cn/download/ 下载msi版本安装。

1996
来自专栏云计算教程系列

如何在Debian 8上用mod_proxy将Apache设置为反向代理

reverse proxy(反向代理)是一种代理服务器,它接收HTTP(S)请求并将它们透明地分发到一个或多个后端服务器。反向代理非常实用,因为许多现代Web应...

863
来自专栏武军超python专栏

2018年8月1日linux中文件管理中各个文件名称的释义

unix/linux文件管理方式: /           unix/linux根目录,unix/linux中所有的设备、文件都存放在这个目录下 /sbin...

693
来自专栏后端技术探索

Nginx从听说到学会(2.应用场景和常用命令)

传统的web项目,一般都将静态资源存放在 webroot的目录下,这样做很方便获取静态资源,但是如果说web项目很大,用户很多,静态资源也很多时,服务器的性能 ...

842
来自专栏漏斗社区

工具 | w3af系列高级篇(三)

本期带来w3af的高级使用,包括认证扫描,页面爬取和漏洞利用等几个部分。 一、认证扫描 w3af支持如下4种认证类型: HTTP Basic authen...

4608

扫码关注云+社区