mysql客户端hang_MySQL所有操作hang住了,怎么破?
《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住了,怎么破?相关推荐
- 记录mysql客户端所有的操作
今天在网上看到这个方法,感觉不错,可以记录mysql客户端所有的操作,这个可以为mysql出现问题之后的错误排查有一定的帮助作用,具体操作如下: 在服务器上的/etc/my.cnf中的[client] ...
- MySQL客户端的进阶操作
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 作者:土豆娃娃 文章来源:社区投稿 引言 作为一个M ...
- oracle数据库内核,深入内核:Oracle数据库里SELECT操作Hang解析
崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 编辑手记:感谢崔华授权我们独家转载其精品文章,也欢迎大家向"Oracle"社区投稿. 我们 ...
- mysql 备库 hang住_mysql主键的缺少导致备库hang住
最近线上频繁的出现slave延时的情况,经排查发现为用户在删除数据的时候,由于表主键的主键的缺少,同时删除条件没有索引,或或者删除的条件过滤性极差,导致slave出现hang住,严重的影响了生产环境的 ...
- mysql autocommit0_autocommit=0引起的业务hang住
背景 有用户报告一个普通的select 语句被hang住了,执行超时.查明之后发现是autocommit使用不当导致. 这里将case简化,说明复现步骤及原因. 复现 session1 建表并插入数据 ...
- MySQL 执行DDL语句 hang住了怎么办?
MySQL 执行DDL语句 hang住了怎么办? 不要慌,先点支烟,听我娓娓道来! 前两天,早上7点多的时候,抓起手机忽然看到了圈内的一则DDL语句 hang住的案例,阅读到文末,发现文中留有一些疑问 ...
- mysql 解决慢sql_MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法...
某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql服务被hang住了,而且慢sql不断在增加中,如果手动在mysql界面kill的话,根本来不及,这个时候,shell ...
- Openstack技术\在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server
MySQL部署 在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server. 操作步骤: 搜索mysql镜像 拉取mysql镜像 创建容器 操作容器中的mysql 容器 ...
- MySql的相关资操作
01-MySql的前戏 MySql的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码root|123321 alex|1231 ...
最新文章
- CSDN湘苗培优,打造高素质技术人才
- docker 上传到自己的容器
- 生信分析-本地BLAST
- CNN(Convolutional Neural Networks)算法
- 这不是bug,而是语言特性
- 曾经觉得学习晦涩难懂的我是如何爱上linux的
- STL之vetor 排序
- 石子归并 51Nod - 1021
- 话里话外: 信息化与高层参与度的关系
- 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面(Java)
- 数据可视化系列(一):Matplotlib初相识
- C语言求一个数的平方根倒数的近似值-一战封神的代码
- PDF编辑器怎么用,如何旋转PDF页面
- vue中用echarts 绘制geo 中国地图
- 影视剪辑,如何一个人自学短视频7天vlog教程
- 泄露libc库、shellcode、__libc_csu_init
- 关于强类型语言和无(弱)类型语言——致编程入门者
- 如何关闭系统自带的屏幕放大125%
- 常用计算机外部设备有哪些,常用的计算机外设有哪些?
- PROFINET基础知识介绍
热门文章
- android studio插件提升工作效率
- 回首经典的SQL Server 2005
- LeetCode-Add Binary
- fatal error C1083: Cannot open include file: 'ceconfig.h': No such file or directory
- Linux网络协议栈(四)——链路层(2)
- [网络安全自学篇] 二十八.文件上传入门及防御原理(一)
- [android] 百度地图开发 (二).定位城市位置和城市POI搜索
- Git内部原理之深入解析Git的引用和包文件
- iOS之深入解析单例的实现和销毁的底层原理
- OpenGL之裁剪与颜色混合