批量或大规模杀死行为不端的 MySQL 查询

dea*_*mer 6 mysql bulk-action

你如何杀死大量的 MySQL 查询?这是一个很好的方法

mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';
mysql> source /tmp/a.txt;
Run Code Online (Sandbox Code Playgroud)

除了在 MySQL 管理员 GUI 中单击它们致死之外还有其他的吗?

And*_*ndy 6

Percona 的观点中提取最好的评论:

评论 4:罗伯特·伍尔奇

我更喜欢以下内容,因为它会以多线程方式杀死它们……(有时杀死单个查询可能需要一段时间)

for i in $(mysql -uroot -pPASS -e 'show processlist' | grep 'search_term' | awk '{print $1}'); 做

mysql -uroot -pPASS -e “kill $i” &

完毕

评论 8:Shlomi Noach

一个INFORMATION_SCHEMA.PROCESSLIST 存储过程,复制起来有点冗长。

评论 16:布莱恩

如果您的 MySQL 版本上不存在 information_schema.processlist,则这适用于 linux 脚本:

#!/bin/bash

为每个`mysqladmin -u root -prootpwd processlist | awk
'{打印 $2, $4, $8}' | grep $dbname | grep $dbuser | awk '{print $1}'`;

do mysqladmin -u root -prootpwd kill $each;

完毕

评论 21:安德鲁·沃森

我这样做:

mysqladmin 过程 | grep 睡眠 | sort -r -n -k6 | awk {'打印 $1; '} | xargs mysqladmin 杀死

或类似的东西……


正如Dan C 在他对这个问题的回答中提到的那样,修剪 SELECTS 比在流程中终止写入命令要安全得多,因为您可能会丢失数据完整性和/或外键。