2019独角兽企业重金招聘Python工程师标准>>>

前段时间 现网突然频繁报出 连接不上数据库,偶滴的妖孽,其他地方都是用mysql,也没遇到这个问题呀。

java.io.EOFExceptionat
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)

场景出现的理论依据
MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0/dbcp 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向c3p0/dbcp 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。

如果你只是个程序员,你会想着,在去对数据库做操作前,我不是先对数据库连接做个校验或判断什么的,连接是working的,我才干活,那么你得到的解决方案-或许就是这样的

#c3p0配置
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->
<property name="maxIdleTime">60</property>
<!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,
超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->
<property name="checkoutTimeout" value="3000"/>
<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。
如果定义了这个参数那么属性preferredTestQuery将被忽略。
你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->   <property name="automaticTestTable">Test</property>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的   时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable   等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">false</property>
<!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
<property name="testConnectionOnCheckin">true</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">60</property>

如果你只是个DBA,你会想着,为什么数据库连接自己断了,是不是哪里有配置,我得去看看,那么你得到的解决方案-可能就是这样的

#my.cnf
wait_timeout=31536000
interactive_timeout=31536000

加大wait_timeout的时间。

But 现实环境中需要你考虑的是:

  1. 你设置多久检查一次连接有效的时间 依据是什么?
  2. 默认加大/减小wait_timeout除了解决当前问题,会不会带来其他影响?

个人当前觉得此题 第一需考虑的是:
你业务当前高峰期mysql_connection是多少?保留多久connection在高峰期都不会撑爆你数据库连接池?
如果你知道这个池-那么是改mysql ?还是改c3p0?还是双管齐下都是有据可循且不会带来后遗症的-最佳解决方案

如我当前有环境,一个现网的后台管理系统,使用人数在50以内,那么我wait_timeout 就是默认8小时,c3p0不用做连接有效性检查等,都是万事ok的。

而我还有一个EPG前台管理系统,用户量在300万以内,如果我wait_timeout为8小时,那我一到高峰期肯定就是死翘翘的,会有太多的TCP连接没关闭,
数据库连接数肯定是不够的。
因EPG的一个访问-一次对数据库操作量不大,查询完数据就完成ok啦,wait_timeout 设置在120s内应该是够用啦,那么相对应的c3p0中 设置小于wait_timeout 的时间有效性检查 -就能确保获取到连接是有效的。

请根据业务场景,来配置参数,不要解决了A问题,带来了B问题。

作者:灼灼2015
链接:https://www.jianshu.com/p/69dcae4454b3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://my.oschina.net/u/2820842/blog/1842669

mysql经典的8小时问题-wait_timeout相关推荐

  1. mysql超经典的8小时问题-wait_timeout

    经常作妖的问题,咱们一起干掉它. 异常如下: java.io.EOFExceptionat at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913) ...

  2. mysql把表里是时间加8小时_mysql经典的8小时问题-wait_timeout

    前段时间 现网突然频繁报出 连接不上数据库,偶滴的妖孽,其他地方都是用mysql,也没遇到这个问题呀. java.io.EOFExceptionat at com.mysql.jdbc.MysqlIO ...

  3. mysql 8小时问题_Mysql经典的“8小时问题”

    假设你的数据库是mysql,如果数据源配置不当,将可能发生经典的"8小时问题".原因是mysql在默认情况下,如果发现一个连接的空闲时间超过8小时,将会在数据库端自动关闭这个连接. ...

  4. 10 个 MySQL 经典错误【转】

    Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原 mysql> show variables like '%max_connec ...

  5. MySQL的典型八小时问题

    一.问题描述: 1.预约记录更新数据库时提示错误. 2.程序发送成功,但数据库返回失败. 3.提示由程序端引起的异常. 二.问题分析 1.mysql数据库有个经典的"8小时问题". ...

  6. mysql 经典入门教程_MySQL 经典入门教程

    MySQL 经典入门教程 1 定义 数据库中的表:一行叫一条记录.每一列叫一个属性,或一个字段. 主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录 外键:表中的某个字段的 ...

  7. mysql面试题sql语句_数据库MySQL经典面试题之SQL语句

    数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex ...

  8. mysql时间返回整小时_MySql 时间处理

    这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...

  9. mysql统计每半小时内的数据(查寻某段时间内的数据)

    mysql统计每半小时内的数据(查寻某段时间内的数据) 表结构 sql展示 sql说明 结果展示 思考 需求:统计某段时间内的数据,以半小时为单位统计 表结构 sql展示 SELECT @rank:= ...

最新文章

  1. Python 获取接口数据,解析JSON,写入文件
  2. 计算机病毒洛,蓝狐动漫《百变机兽》中未完的战争,蓝毒兽原来是电脑病毒?...
  3. angular element()
  4. Mac技巧|如何在 MacBook上设置一位数登录密码
  5. C#LeetCode刷题之#463-岛屿的周长​​​​​​​(Island Perimeter)
  6. linux安装到内存中,Linux安装识别大内存的补丁程序
  7. 简单的php文件_简单的php文件上传(实例)
  8. JS框架_(Progress.js)圆形动画进度条
  9. 【Python】@staticmethod和@classmethod的作用与区别
  10. 利用高德地图获取经纬度-python
  11. 会员等级图标js脚本
  12. Linux环境下获取硬盘序列号
  13. word中硬回车(enter)与软回车(shift+enter)
  14. CSDN格式字体颜色入门
  15. VS2008 ActiveX(ocx控件)的调试工具ActiveX Control Test Container安装说明
  16. 17届智能车-电磁组比赛心得一
  17. 改进的节点分析法(Modified Nodal Analysis)
  18. 【盘点】值得推荐的优质文章!
  19. Manjaro 安装后的简单配置与美化以及小技巧 (2019.12.15 更新)
  20. 如何辨别该公司是不是培训机构的技巧

热门文章

  1. 光华科技光刻胶_【收藏】6天5板!21只光刻胶概念(名单)“出炉”!
  2. JavaScript 第四课 案例研究:JavaScript图片库
  3. 持续5个月,200+笔记,3千多人参与,邀请你来学源码~
  4. MySQL数据库基础(五)——SQL查询
  5. Objective-C中的@property
  6. Mysql Hunter
  7. Oracle数据库在Nokia
  8. Thrift第三课 编写脚本
  9. 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing
  10. hdu6103[尺取法] 2017多校6