【发布时间】:2017-10-26 19:22:20
【问题描述】:
由于某些查询,MySQL 数据库挂起。
我怎样才能找到进程并杀死它们?
【问题讨论】:
标签: mysql kill-process
由于某些查询,MySQL 数据库挂起。
我怎样才能找到进程并杀死它们?
【问题讨论】:
标签: mysql kill-process
解决办法如下:
show full processlist;以获取进程ID和状态并查询导致数据库挂起的自身;KILL <pid>; 以终止该进程。有时手动杀死每个进程是不够的。因此,为此我们必须使用一些技巧:
Select concat('KILL ',id,';') from information_schema.processlist where user='user'; 以使用KILL 命令打印所有进程;| 符号,再次复制并粘贴到查询控制台中。 按回车键。 Boom 完成了。【讨论】:
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 ' '),所以它们都放在可以复制粘贴的一行
SELECT group_concat(concat('KILL ',id,';') SEPARATOR ' \n') AS KILL_EVERYTHING FROM information_schema.processlist;
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;
【讨论】:
您可以执行以下操作来检查是否有任何mysql 进程正在运行:
ps aux | grep mysqld
ps aux | grep mysql
如果它正在运行,你可以使用killall(取决于当前所有进程正在运行):
killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe
【讨论】:
对于 MYSQL 8.xx 你可以只使用 mysqladmin 关闭。不确定这是否适用于旧版本。
root 密码为 SomePass 的示例
mysqladmin -u root -pSomePass shutdown
您还应该在 /var/log/mysql/error.log 中看到关闭
【讨论】: