今天在后台跑任務的時候,發現了數據庫報錯1205 - Lock wait timeout exceeded; try restarting transaction。問題原因是因為表的事務鎖,以下是解決方法:
我需要操作的表為zd2_hkmx,所以我重點找這張表相關的進程和事務:
說明一下,解決問題是需要數據庫的root用戶的
-- 查找表zd2_hkmx的相關的事務(與解決問題關系不大,只是方便查看) select * from information_schema.innodb_trx where trx_query like '%zd2_hkmx%'; -- 查找zd2_hkmx的相關的進程(與解決問題關系大) select * from information_schema.processlist where info like 'insert%zd2_hkmx%';
建議再不知道哪些鎖的情況下,先把where去掉,然后加上自己的where。
-- 生成關閉進程sql select concat('kill ',id,';') from information_schema.processlist where info like 'insert%zd2_hkmx%';
將上面的sql執行結果(生成一堆sql)拷出來,執行之后,問題應該就解決了。
同理,如果要讓某個庫解除所有占用,則需要關閉相關的進程:
select concat('kill ',id,';') from information_schema.processlist where db='mydatabase' ;