如何找到MySQL进程列表并杀死这些进程?


Answers:


152

解决方法如下:

  1. 登录数据库;
  2. 运行命令show full processlist;以获取带有状态的进程ID并查询自身,这会导致数据库挂起;
  3. 选择进程ID,然后运行命令KILL <pid>;以终止该进程。

有时仅仅手动杀死每个进程是不够的。因此,为此,我们需要一些技巧:

  1. 登录MySQL;
  2. 运行查询Select concat('KILL ',id,';') from information_schema.processlist where user='user';以使用KILL命令打印所有进程;
  3. 复制查询结果,粘贴并删除管道|符号,然后再次全部复制并粘贴到查询控制台中。命中输入。Bom,它已经完成了

8
该查询很棒!对于任何光MySQL的经验看这个,你也可以通过文件管理器的查询HostdbCommandTimeState,或者InfoSELECT concat('KILL ',id,';') from information_schema.processlist where Command='Sleep';SELECT concat('KILL ',id,';') from information_schema.processlist where Time>'300';
KareemElashmawy

6
感谢您的查询!我使用了增强的版本,可以节省一些手动编辑时间:select group_concat(concat('KILL ',id,';') separator ' ')因此它们全部都落在可以复制粘贴的一行上
architectonic

1
该查询可以,但是您最终可能会杀死自己的进程。在重新运行“ kill all”之前,我将查看进程ID列表。
Patrick.SE

2
调整@architectonic的注释使我立即可以更轻松地处理剪贴板中的内容(即使使用令人讨厌的开头和结尾双引号) SELECT group_concat(concat('KILL ',id,';') SEPARATOR ' \n') AS KILL_EVERYTHING FROM information_schema.processlist;
leerssej

22
select GROUP_CONCAT(stat SEPARATOR ' ') from (select concat('KILL ',id,';') as stat from information_schema.processlist) as stats;

然后将结果复制并粘贴回终端。就像是:

KILL 2871; KILL 2879; KILL 2874; KILL 2872; KILL 2866;

12

您可以执行以下操作来检查是否mysql正在运行任何进程:

ps aux | grep mysqld
ps aux | grep mysql

然后,如果它正在运行,则可以killall使用(取决于当前正在运行的所有进程):

killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe    

5
OP正在询问MySQL服务器中正在运行的进程。
reinierpost

4
尽管不是要求什么,但它有所帮助,因为这是google搜索如何杀死linux上所有mysqld进程时返回的第一项;)
IncredibleHat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.