如何杀死processlist中的所有MySQL进程?

我想杀死进程列表中的所有MySQL进程。 有没有办法做到这一点?

# mysqladmin -u root -p processlist Enter password: +------+----------------------+---------------------+----+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+----------------------+---------------------+----+---------+------+-------+------------------+ | 1908 | unauthenticated user | 192.168.1.103:46046 | | Connect | | login | | | 1909 | unauthenticated user | 192.168.1.103:46047 | | Connect | | login | | | 1910 | unauthenticated user | 192.168.1.103:46048 | | Connect | | login | | | 1914 | unauthenticated user | 192.168.1.103:46049 | | Connect | | login | | | 1946 | unauthenticated user | 192.168.1.103:46076 | | Connect | | login | | | 1954 | unauthenticated user | 192.168.1.103:46078 | | Connect | | login | | | 2015 | root | localhost | | Query | 0 | | show processlist | +------+----------------------+---------------------+----+---------+------+-------+------------------+ 

看起来这可能是在散装或大规模杀死行为exception的MySQL查询

停止/启动MySQL实例不是一个答案。 在大多数情况下,它可能需要相当多的时间,并影响您的生产。 你应该杀死这样的查询。

两篇有趣的文章:

如何有select地杀死MySQL中的查询?

和:

为什么线程有时在MySQL中停留在“被杀”状态?

最快的方法就是重新启动MySQL。 否则,你将需要一个一个地杀死每个正在运行的进程(在mysqladmin中没有killall)。

你可以用shell脚本实现这个function:

 #!/bin/bash # Get the processlist and save it in a file mysqladmin -u root -p"your password" processlist > fullproce # Get the process ids of the processes in the "Sleep" state and save them in id. # Adjust the grep to match the processes you want to kill. cat fullproce |grep Sleep |awk -F " " '{print $2}' > id for todos_id in `cat ./id` do # Kill each id identified earlier. mysqladmin -u root -p"your password" KILL $todos_id ; done # Remove files rm fullproce rm id 

这个shell命令可能有助于终止所有的睡眠过程:

 mysqladmin proc | grep Sleep | awk '{print $2}' | xargs -L1 mysqladmin kill