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

由于一些查询,MySQL 数据库挂起。

我如何找到进程并杀死它们?

356384 次浏览

解决办法如下:

  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. 复制查询结果,粘贴和删除管道 |标志,复制和粘贴所有再到查询控制台。按回车,搞定.

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

ps aux | grep mysqld
ps aux | grep mysql

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

killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe
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;

对于 MYSQL8.xx,你可以直接使用 mysqladmin 关机。不确定这是否适用于旧版本。

Root 密码为 SomPass 的示例

mysqladmin -u root -pSomePass shutdown

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

关于 RDS:

SELECT
concat('CALL mysql.rds_kill(',id,');')
FROM information_schema.processlist
ORDER BY time;