如何找到 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 经验的人,您还可以通过Host
、db
、Command
、Time
、State
或 Info
提交查询: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 进程列表并杀死这些进程?的主要内容,如果未能解决你的问题,请参考以下文章