前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL锁表的快速定位和恢复

MySQL锁表的快速定位和恢复

原创
作者头像
haowentang
修改2018-09-17 11:54:40
1.5K0
修改2018-09-17 11:54:40
举报

1. 执行 show processlist;

查看db当前在执行的任务,可以发现已经堆积了很多update,引起死锁的query一般就在第一个update/insert之前,一般是一个read or create or alter语句

2. 执行 select * from information_schema.innodb_trx order by trx_started limit 3\G

查看db当前的事务,找那个创建时间最早的(从发现死锁开始),找出thread_id

3. 执行 show engine innodb status\G

找出最近检查到的死锁

4. 通过1+2+3总结找出引发死锁的thread_id,kill thread_id

5. 通过query的client ip/port到相应机器上找到肇事者,分析原因,一般都是由于create或者read后,没有提交事务导致的

注意:

python mysqldb默认不自动提交事务,需要手动执行commit(),因此很容易出现client长时间read后没有commit,和后续的修改table操作冲突,导致锁表。在此建议大家在代码里都加上一行 conn.autocommit(True),避免因为忘记commit事务而引发锁表问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 执行 show processlist;
  • 2. 执行 select * from information_schema.innodb_trx order by trx_started limit 3\G
  • 3. 执行 show engine innodb status\G
  • 4. 通过1+2+3总结找出引发死锁的thread_id,kill thread_id
  • 5. 通过query的client ip/port到相应机器上找到肇事者,分析原因,一般都是由于create或者read后,没有提交事务导致的
  • 注意:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档