防止连接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 条评论
登录 后参与评论

相关文章

来自专栏流柯技术学院

LR常见问题整理

  当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。

994
来自专栏恰同学骚年

ASP.Net请求处理机制初步探索之旅 - Part 1 前奏

开篇:ASP.Net是一项动态网页开发技术,在历史发展的长河中WebForm曾一时成为了ASP.Net的代名词,而ASP.Net MVC的出现让这项技术更加唤发...

682
来自专栏Python攻城狮

Django教程(一)- Django视图与网址1.简介2.环境搭建3.安装pycharm4.Ubuntu下 正确安装VMware Tools5.Django主要模块6.Django基本命令7. Dj

Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

662
来自专栏阮一峰的网络日志

HTTP 协议入门

HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。 本文介绍 HTTP 协议的历史演变和设计思路。 ? 一...

32711
来自专栏Java Web

Java 面试知识点解析(五)——网络协议篇

在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

3479
来自专栏大数据智能实战

linux环境下时区无法设置(系统时间慢8个小时)的问题解决

当有一台节点崩溃之后,重启之后,观察spark 集群日志,发现有个时间无法同步的问题。 再一仔细检查系统,输入date -R 才发现系统时间的时区设置为空。后面...

2139
来自专栏kl的专栏

spring boot集成redisson的最佳实践

本文假使你了解spring boot并实践过,非spring boot用户可跳过也可借此研究一下。redisson是redis的java客户端程序,国内外很多公...

9387
来自专栏Python爬虫与数据挖掘

在vSpere Client上如何克隆虚拟机

这几天小编一直在机房搭建平台,没有时间整理一些知识给大家。前几天小编分享了如何在vSphere Client上创建虚拟机,感兴趣的伙伴可以点击进...

691
来自专栏猫哥学前班

Git 进阶指南

在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题。以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完...

2776
来自专栏Java Web

Java 面试知识点解析(五)——网络协议篇

1659

扫描关注云+社区