你如何杀死大量的 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 中单击它们致死之外还有其他的吗?
从Percona 的观点中提取最好的评论:
我更喜欢以下内容,因为它会以多线程方式杀死它们……(有时杀死单个查询可能需要一段时间)
for i in $(mysql -uroot -pPASS -e 'show processlist' | grep 'search_term' | awk '{print $1}'); 做
mysql -uroot -pPASS -e “kill $i” &
完毕
一个INFORMATION_SCHEMA.PROCESSLIST 存储过程,复制起来有点冗长。
如果您的 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;
完毕
我这样做:
mysqladmin 过程 | grep 睡眠 | sort -r -n -k6 | awk {'打印 $1; '} | xargs mysqladmin 杀死
或类似的东西……
正如Dan C 在他对这个问题的回答中提到的那样,修剪 SELECTS 比在流程中终止写入命令要安全得多,因为您可能会丢失数据完整性和/或外键。