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

Posted

技术标签:

【中文标题】如何找到 MySQL 进程列表并杀死这些进程?【英文标题】:How to find MySQL process list and to kill those processes? 【发布时间】:2017-10-26 19:22:20 【问题描述】:

由于某些查询,mysql 数据库挂起。

我怎样才能找到进程并杀死它们?

【问题讨论】:

【参考方案1】:

解决办法如下:

    登录数据库; 运行命令show full processlist;以获取进程ID和状态并查询导致数据库挂起的自身; 选择进程 ID 并运行命令 KILL <pid>; 以终止该进程。

有时手动杀死每个进程是不够的。因此,为此我们必须使用一些技巧:

    登录 MySQL; 运行查询Select concat('KILL ',id,';') from information_schema.processlist where user='user'; 以使用KILL 命令打印所有进程; 复制查询结果,粘贴并删除管道| 符号,再次复制并粘贴到查询控制台中。 按回车键。 Boom 完成了

【讨论】:

这个查询很棒!对于任何有少量 MySQL 经验的人,您还可以通过 HostdbCommandTimeStateInfo 提交查询:SELECT concat('KILL ',id,';') from information_schema.processlist where Command='Sleep';SELECT concat('KILL ',id,';') from information_schema.processlist where Time>'300';跨度> 感谢您的询问!我使用了一个可以节省一些手动编辑时间的增强版本:select group_concat(concat('KILL ',id,';') separator ' '),所以它们都放在可以复制粘贴的一行 查询没问题,但你最终可能会杀死自己的进程。在重新运行“全部杀死”之前,我会查看进程 ID 列表。 调整@architectonic 的评论,让我立即更容易处理剪贴板(即使有讨厌的打开和关闭双引号)SELECT group_concat(concat('KILL ',id,';') SEPARATOR ' \n') AS KILL_EVERYTHING FROM information_schema.processlist;【参考方案2】:
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;

【讨论】:

【参考方案3】:

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

ps aux | grep mysqld
ps aux | grep mysql

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

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

【讨论】:

OP 正在询问 MySQL 服务器中运行的进程。 虽然不是所要求的,但它有所帮助,因为这是 google 在搜索如何杀死 linux 上的所有 mysqld 进程时返回的第一项;)【参考方案4】:

对于 MYSQL 8.xx 你可以只使用 mysqladmin 关闭。不确定这是否适用于旧版本。

root 密码为 SomePass 的示例

mysqladmin -u root -pSomePass shutdown

您还应该在 /var/log/mysql/error.log 中看到关闭

【讨论】:

以上是关于如何找到 MySQL 进程列表并杀死这些进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何用linux组合指令查找某个进程并杀死

Linux上寻找并杀死僵尸进程

【zombie】如何查看并杀死僵尸进程?

如何找到并杀掉 Linux 系统中的僵尸进程

杀死进程并在erlang中运行程序

找到并杀死一个软件开启的进程