问题
更新某条数据时出现以下错误,就一直阻塞在那里,直到timeout,出现以下错误
[40001][1205] Lock wait timeout exceeded; try restarting transaction
由此可见遇见锁啦,怎么破?唯有解锁。
解决
看看自己有哪条sql正在waiting 什么的,在那给卡住的。
show processlist ;
如果这样看不出来。使用
当前运行的所有事务
SELECT * FROM information_schema.INNODB_TRX;
当前出现的锁
SELECT * FROM information_schema.INNODB_LOCKs;
锁等待的对应关系
SELECT * FROM information_schema.INNODB_LOCK_waits;
观察事务表INNODB_TRX里是否有正在锁定的事务线程,再看看在show processlist是否有对应ID在sleep。
如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。
找到对应的id,干掉就完事啦。
kill {id}