鎖表問題提示:Lock wait timeout exceeded; try restarting transaction
解決鎖表方法
查詢數據庫阻塞的進程
SELECT * FROM information_schema.innodb_trx
主要看箭頭指向的這幾個字段,如果有阻塞數據(不為0的就是阻塞的),找到后在根據下圖這個字段:try_mysql_thread_id 作為這條數據的主鍵id執行這個sql進行刪除: kill id ;(殺死對應id的進程).假設這里try_mysql_thread_id=進程id 的這條數據是鎖了。我們執行 kill 進程id 刪除就不在鎖表了
常用鎖表命令
//查看進程id,然后用kill id殺掉進程
show processlist;
SELECT * FROM information_schema.PROCESSLIST;
//查詢正在執行的進程
SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ;
//查詢是否鎖表
show OPEN TABLES where In_use > 0;
//查看被鎖住的
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
//等待鎖定
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
//殺掉鎖表進程
kill 12041