《MySQL所有操作hang住了,怎么破?》要点:

本文介绍了MySQL所有操作hang住了,怎么破?,希望对您有用。如果有疑问,可以联系我们。

作者介绍

王松磊,现任职于UCloud,从事MySQL数据库内核研发工作.主要负责UCloud云数据库udb的内核故障排查工作以及数据库新特性的研发工作.

系统环境

CentOS release 6.7

MySQL社区版MySQL-5.5.24

故障简述

首先收到故障告警,所有的监控无法读取到数据.稍后收到客户的反馈,无法正常连接数据库.

故障排查

1、尝试登陆数据库

发现登陆发生hang住的情况,无法正常连接.无任何提醒信息报出.

shell>mysql -h192.168.150.21 -P50001 -uabc -pabc

shell>mysql  -S /var/lib/mysql/mysql.sock  -uabc -pabc

2、查看错误日志

错误日志完全正常,无任何错误日志报出.

3、使用pstack

使用pstack工具查看进程内各个线程的堆栈信息.执行命令:

shell>pstack    >  pstack.log

将堆栈日志存放到pstack.log文件中,分析堆栈日志的内容.发现存在很多线程处于等待线程互斥量mutex的状态,并且等待的mutex是两个不同的mutex,猜测是因为源码内存在bug,所以造成了进程死锁:

其中线程2和线程3分别在等待不同的mutex.

而其它新连接或者已经连接无应答的进程,也在等待其中的一个mutex.

4、使用gdb查看具体信息

执行如下命令attach到mysqld进程,查看当前线程堆栈的具体情况.

shell>gdb -p

执行命令info thread查看线程的具体信息,发现很多线程均在等待锁信息.通过上面描述的pstack日志信息,我们知道线程2和线程3存在等待不同锁的行为且可疑性比较高.

切换到线程2查看,线程在等待的mutex为LOCK_index.

切换到线程3查看,线程在等待的mutex为LOCK_thread_count.

由此猜测,是源码中由于存在LOCK_index和LOCK_thread_count相互等待的BUG,导致两个mutex均未被释放,从而发生死锁情况.其它需要获得锁的操作均发生一致等待的情况(即发生hang住).

5、查看源码

根据gdb调试中线程2和线程3的信息,查看命令purge binlog和reset master对应的源码.查看发现两个命令对于LOCK_thread_count和LOCK_index调用顺序是不同的.导致同时执行时会发生相互等待,发生死锁的情况.

解决问题

通过与客户沟通,得到确认,客户同时执行了purge binlog和reset master命令.最终也确认了我们的猜想,由于上述原因导致了问题的产生.

在查看官方修复后,发现该bug已经修复.升级到高版本,将客户数据迁移后解决了此问题.

文章来自微信公众号:DBAplus社群

mysql客户端hang_MySQL所有操作hang住了,怎么破?相关推荐

  1. 记录mysql客户端所有的操作

    今天在网上看到这个方法,感觉不错,可以记录mysql客户端所有的操作,这个可以为mysql出现问题之后的错误排查有一定的帮助作用,具体操作如下: 在服务器上的/etc/my.cnf中的[client] ...

  2. MySQL客户端的进阶操作

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 作者:土豆娃娃 文章来源:社区投稿 引言 作为一个M ...

  3. oracle数据库内核,深入内核:Oracle数据库里SELECT操作Hang解析

    崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 编辑手记:感谢崔华授权我们独家转载其精品文章,也欢迎大家向"Oracle"社区投稿. 我们 ...

  4. mysql 备库 hang住_mysql主键的缺少导致备库hang住

    最近线上频繁的出现slave延时的情况,经排查发现为用户在删除数据的时候,由于表主键的主键的缺少,同时删除条件没有索引,或或者删除的条件过滤性极差,导致slave出现hang住,严重的影响了生产环境的 ...

  5. mysql autocommit0_autocommit=0引起的业务hang住

    背景 有用户报告一个普通的select 语句被hang住了,执行超时.查明之后发现是autocommit使用不当导致. 这里将case简化,说明复现步骤及原因. 复现 session1 建表并插入数据 ...

  6. MySQL 执行DDL语句 hang住了怎么办?

    MySQL 执行DDL语句 hang住了怎么办? 不要慌,先点支烟,听我娓娓道来! 前两天,早上7点多的时候,抓起手机忽然看到了圈内的一则DDL语句 hang住的案例,阅读到文末,发现文中留有一些疑问 ...

  7. mysql 解决慢sql_MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法...

    某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql服务被hang住了,而且慢sql不断在增加中,如果手动在mysql界面kill的话,根本来不及,这个时候,shell ...

  8. Openstack技术\在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server

    MySQL部署 在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server. 操作步骤: 搜索mysql镜像 拉取mysql镜像 创建容器 操作容器中的mysql 容器 ...

  9. MySql的相关资操作

    01-MySql的前戏 MySql的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码root|123321 alex|1231 ...

最新文章

  1. CSDN湘苗培优,打造高素质技术人才
  2. docker 上传到自己的容器
  3. 生信分析-本地BLAST
  4. CNN(Convolutional Neural Networks)算法
  5. 这不是bug,而是语言特性
  6. 曾经觉得学习晦涩难懂的我是如何爱上linux的
  7. STL之vetor 排序
  8. 石子归并 51Nod - 1021
  9. 话里话外: 信息化与高层参与度的关系
  10. 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面(Java)
  11. 数据可视化系列(一):Matplotlib初相识
  12. C语言求一个数的平方根倒数的近似值-一战封神的代码
  13. PDF编辑器怎么用,如何旋转PDF页面
  14. vue中用echarts 绘制geo 中国地图
  15. 影视剪辑,如何一个人自学短视频7天vlog教程
  16. 泄露libc库、shellcode、__libc_csu_init
  17. 关于强类型语言和无(弱)类型语言——致编程入门者
  18. 如何关闭系统自带的屏幕放大125%
  19. 常用计算机外部设备有哪些,常用的计算机外设有哪些?
  20. PROFINET基础知识介绍

热门文章

  1. android studio插件提升工作效率
  2. 回首经典的SQL Server 2005
  3. LeetCode-Add Binary
  4. fatal error C1083: Cannot open include file: 'ceconfig.h': No such file or directory
  5. Linux网络协议栈(四)——链路层(2)
  6. [网络安全自学篇] 二十八.文件上传入门及防御原理(一)
  7. [android] 百度地图开发 (二).定位城市位置和城市POI搜索
  8. Git内部原理之深入解析Git的引用和包文件
  9. iOS之深入解析单例的实现和销毁的底层原理
  10. OpenGL之裁剪与颜色混合