1. 开启一个MySQL连接,在这个连接中发起一个事务,进行一些操作但不提交

2. 拔网线

3. 重连网线,再开启一个MySQL连接,执行delete操作,发现stpe 1中占用的资源没有被释放

4. 执行show processlist,发现step1中创建的连接依然存在而且处于sleep状态,并将一直存在,直到wait_timeout超时为止

原理

MySQL协议本身不含有心跳功能,一旦建立连接,这条连接线程就一直在server端存在,直到收到client发来的断开连接请求/连接sleep时间超过wait_timeout/手动杀死这条连接 为止

测试中,step 2直接拔了网线,那么这个线程就一直存在了,并且一直为sleep状态,从而一直占用资源

但是如果重连网线后,再次操作step 1中的那个连接,是可以成功commit/rollback未完成的事务的(估计cli保存了会话id,直接连到老的连接去了)

影响

如果网络环境差,会导致MySQL sever端存在大量无用的sleep线程,一个是占用有限的MySQL连接数,另一个是可能会锁住表记录,导致其他连接超时,这可能会引发雪崩的效果

解决
1. 设置wait_timeout为一个比较小的值(interactive_timeout是交互式连接,如cli使用的,一般无需调整),然后应用定时发送心跳来维护连接(一般的连接池都有相关的功能)

2. 应用将每次申请的连接对应的server线程id记录下来,然后定时的杀死自己曾经申请过的连接(kill -tid)以释放资源(很不合适,如果线程id重复了就有错杀的可能)

MySQL的一个麻烦事的更多相关文章

  1. MySQL, 创建一个只读用户和一个所有权限用户

    安装pasa需要配置mysql.基本知识学习一下 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html MySQL 为关系型数据库 ...

  2. MySQL创建一个用户,指定一个数据库 授权

    Mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 hail mysql -u root -ppassworduse mysql;insert into user(h ...

  3. 转:mysql 创建一个用户,指定一个数据库

    转自:http://blog.sina.com.cn/s/blog_8c2525390101h0dv.html mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 h ...

  4. mysql 创建一个用户,指定一个数据库

    mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 hail mysql -u root -p password use mysql; insert into use ...

  5. mysql添加一个字段(

    mysql添加一个字段(在指定的一个字段后面) 举个栗子:alter table inquiry add error_code varchar(3) after add_time; 说明:alter ...

  6. mysql用一个表更新另一个表的方法

    Solution 1:  修改1列(navicate可行) update student s, city c set s.city_name = c.name where s.city_code = ...

  7. vue+nodejs+express+mysql 建立一个在线网盘程序

    vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...

  8. 转 mysql有一个warning,但可以执行成功

    mysql有一个warning,但可以执行成功,报整型值错误,怎么解,求支招 转 http://tieba.baidu.com/p/4558183228

  9. ***mysql 用一个表的一列,去更新另一表的一列

    需求: 老板给了一个EXCEL数据,是本人提供的一个模板,含ID,现在相当于要导入这新增的一列数据到数据库中的某一个表. 方法一:用navicat,在excel中复制一列,再粘贴到navicat中的一 ...

随机推荐

  1. k8s的Pod控制器

    pod的配置清单常见选项: apiVersion,kind,metadata,spec,status(只读) spec: containers: nodeSelector: nodeName: res ...

  2. 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)

    点击了解更多Python课程>>> 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天) 课程大纲 1.这一期比之前的Python培新课程增加了很多干货:Linux ...

  3. classpath、WEB-INF

    classpath是指 WEB-INF文件夹下的classes目录(war包),对于springboot项目打包出来的jar包,里面的就是BOOT-INF: 这个demo的源码结构如下: 可见,jav ...

  4. 收集的免费API接口

    1.IP地址调用接口 这是淘宝的IP调用API http://ip.taobao.com/service/getIpInfo.php?ip=$ip 返回值:{"code":0,&q ...

  5. Applied Nonparametric Statistics-lec8

    Ref:https://onlinecourses.science.psu.edu/stat464/print/book/export/html/11 additive model value = t ...

  6. Python如何查看变量在内存中的地址

    在python中可以用id()函数获取对象的内存地址. 用法: object = 1 + 2 object -- 对象

  7. poj 2251 三维地图最短路径问题 bfs算法

    题意:给你一个三维地图,然后让你走出去,找到最短路径. 思路:bfs 每个坐标的表示为 x,y,z并且每个点都需要加上时间 t struct node{ int x, y, z; int t;}; b ...

  8. LA 7049 Galaxy 枚举

    题意: \(x\)轴上有\(n\)个质量为\(1\)的点,他们的坐标分别为\(x_i\). 质心的坐标为\(\frac{\sum{x_i}} {n}\) 转动惯量为\(\sum{d_i^2}\),其中 ...

  9. 加密javascript代码

    最近看了个js日历,里面用到了加密,看了下,自己也模仿做加密,现在只能加密一般的javascript语句 <!DOCTYPE html> <html> <meta htt ...

  10. ogre3d环境配置与简单程序示例

    SDK安装以及编译 1.下载SDK,地址如下 http://www.ogre3d.org/download/sdk 2.安装SDK,直接解压到相应目录,如D:/ogreSDK 3.我用的是1.8版本, ...