解除正在死锁的状态有两种方法:
第一种:
1.查询是否锁表。
show OPEN TABLES where In_use > 0;
2.查询进程。
show processlist(或者:select * from information_schema.processlist where Command != 'Sleep' order by Time desc;)
3.杀死进程id(就是上面命令的id列)
kill id
第二种:
1.查看下在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2.杀死进程id(就是上面命令的trx_mysql_thread_id列)
kill 线程ID
其它关于查看死锁的命令:
1:查看当前的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2:查看当前锁定的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3:查看当前等锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
找出所有执行时间超过 5 分钟的线程,拼凑出 kill 语句,方便后面查杀 (此处 5分钟 可根据自己的需要调整SQL标红处)
select
concat(
'kill '
, id,
';'
)
from
information_schema.processlist
where
Command !=
'Sleep'
and
Time
> 300
order
by
Time
desc
;