欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)

程序员文章站 2022-04-16 12:02:37
在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映。这个时候,就需要kill掉某个正在消耗资源的query语句即可, kill命令的语法格式如下:...

在使用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中各个线程状态。

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 | update t_shop set | 

以上显示出当前正在执行的sql语句列表,找到消耗资源最大的那条语句对应的id.

然后运行kill命令,命令格式如下: 

kill id; 
- 示例: 
kill 8358 

杀掉即可。