一次mysql的锁表问题(这种问题大概有三层)

本文介绍了一种解决MySQL表锁定的方法。当进行ALTER、DROP等操作时,如果MySQL表出现等待状态,可以通过查询information_schema.innodb_trx来查找未提交的事务并kill相应的进程,从而解锁表。

问题描述:

一般来说有什么事务卡死了mysql,直接show processlist找到相应进程然后kill掉就行,但这回很奇怪,show processlist看不到访问问题表的进程,问题表可以增删改,但做alter,drop,truncate等操作时就回wait卡死

 

show processlist可以找到卡死表的长事务,而未提交事务是看不到的需要在表information_schema.innodb_trx里查看

切到root账号,select * from information_schema.innodb_trx\G;

找到了几个一直在RUNNING的事务,把trx_mysql_thread_id全kill一遍,发现又出来了两条事务,但问题表已经解锁了。

 

这次遇到的算是第二层,即未提交的事务,再深一层可能有information_schema.innodb_trx里也没有的情况,这个可能是有一个失败的操作但获取的锁一直存在,这样就要在performance_schema.events_statements_current表里去找这个session

转载于:https://my.oschina.net/u/2247638/blog/868543

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值