mysql使用kill命令解決死鎖問題,殺死某條正在執行或沒有響應的sql語句,

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

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
2
3
4
5
6
7
8
mysql> show processlist;
+------+------+----------------------+----------------+---------+-------+-----------+---------------------
| Id   | User| Host                 | db             | Command | Time | State     | Info
+------+------+----------------------+----------------+---------+-------+-----------+---------------------
| 7028 | root | ucap-devgroup:53396  | platform       | Sleep   | 19553 |           |NULL
| 8352 | root | ucap-devgroup:54794  | platform       | Sleep   |  4245 |           |NULL
| 8353 | root | ucap-devgroup:54795  | platform       | Sleep   |     3 |           |NULL
| 8358 | root | ucap-devgroup:62605  | platform       | query   |  4156 | updating  |updatet_shop set |

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

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

?
1
2
3
 kill id;
-- 示例:
 kill 8358

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章