今天因為mysql導入數據,導致其中一張表死鎖 下面來說說怎么解決死鎖問題
1.先說明一下導致mysql 死鎖的四個條件
互斥條件:就是一個資源只能有一個進程占有,不可以被兩個或者多個進程占有
不可搶占條件:進程已經獲得的資源在未使用完之前,不可以被搶占,只能在使用完之后自己釋放
占有申請條件:進程自己已經至少保持一個資源,又請求其他資源,但是這個資源被其他進程占有,而且又不釋放自己已經占有的資源
循環等待條件:發生死鎖時,必定會形成一個進程——資源的環路。進程集合{p1,p2,p3}中,p1請求p2占有的資源,p2請求p3占有的資源,p3請求p1占有的資源
解決死鎖的方案
第一種:
1.查詢是否鎖表
show OPEN TABLES where In_use > 0;
2.查詢進程(如果您有SUPER權限,您可以看到所有線程。否則,您只能看到您自己的線程)
show processlist
3.殺死進程id(就是上面命令的id列)
kill id
第二種:
1.查看下在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2.殺死進程id(就是上面命令的trx_mysql_thread_id列)
kill 線程ID