Mysql使用kill命令解決死鎖問題

freebus發表於2020-03-31

在使用mysql執行某些語句時,會因資料量太大而導致死鎖,沒有反映。這個時候,就需要kill掉某個正在消耗資源的query語句即可, KILL命令的語法格式如下:


1 KILL [CONNECTION | QUERY] thread_id

每個與mysqld的連線都在一個獨立的執行緒裡執行,您可以使用SHOW PROCESSLIST語句檢視哪些執行緒正在執行,並使用KILL thread_id語句終止一個執行緒。


KILL允許自選的CONNECTION或QUERY修改符:KILL CONNECTION與不含修改符的KILL一樣:它會終止與給定的thread_id有關的連線。KILL QUERY會終止連線當前正在執行的語句,但是會保持連線的原狀。


如果您擁有PROCESS許可權,則您可以檢視所有執行緒。如果您擁有超級管理員許可權,您可以終止所有執行緒和語句。否則,您只能檢視和終止您自己的執行緒和語句。您也可以使用mysqladmin processlist和mysqladmin kill命令來檢查和終止執行緒。


首先登入MySQL,然後使用: show processlist; 檢視當前mysql中各個執行緒狀態。



1 mysql> show processlist; 

2 +------+------+----------------------+----------------+---------+-------+-----------+---------------------  

3 | Id  | User | Host         | db       | Command | Time | State   | Info 

4 +------+------+----------------------+----------------+---------+-------+-----------+---------------------  

5 | 7028 | root | ucap-devgroup:53396 | platform    | Sleep  | 19553 |      | NULL 

6 | 8352 | root | ucap-devgroup:54794 | platform    | Sleep  | 4245 |      | NULL

7 | 8353 | root | ucap-devgroup:54795 | platform    | Sleep  |   3 |      | NULL

8 | 8358 | root | ucap-devgroup:62605 | platform    | query  | 4156 | updating | update t_shop set |

以上顯示出當前正在執行的sql語句列表,找到消耗資源最大的那條語句對應的id.


然後執行kill命令,命令格式如下: 


1 kill id; 

2 - 示例: 

3 kill 8358

殺掉即可。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31365439/viewspace-2683548/,如需轉載,請註明出處,否則將追究法律責任。

相關文章