現象:
Lock wait timeout exceeded; try restarting transaction
場景:在不同伺服器不同僚務内先後對同一個資料表進行插入、更新,資料庫出現被鎖情況
原因:mysql資料庫采用InnoDB模式,預設參數 innodb_lock_wait_timeout 設定鎖等待時間是50s,一旦資料庫鎖超過這個時間就會報錯
解決方法:
1、檢視資料庫目前的程序,看一下是否有正在執行的慢SQL記錄線程
show processlist;
2、檢視目前的事務
目前運作的所有事務
SELECT * FROM information_schema.INNODB_TRX;
目前出現的鎖
SELECT * FROM information_schema.INNODB_LOCKs;
鎖等待的對應關系
SELECT * FROM information_schema.INNODB_LOCK_waits;
解釋:檢視事務表INNODB_TRX,裡面是否有正在lock wait鎖定的事務線程,檢視ID是否在show processlist裡面的sleep線程中,如果是,證明這個sleep線程事務一直沒有commit或者rollback,而是卡住了,需手動kill掉,若要kill語句,一定要進行組内确認哈,避免影響其他業務