Answers:
您可以在下面使用“ SQL to SQL”方法(只需根据需要将额外的连接选项传递给mysql客户端):
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
注意:这适用于MySQL 5.1和5.5。由于information_schema没有processlist表,因此对于旧的MySQL版本,必须采用不同的实现方式。
使用的选项:
-N means that you do not want to get column names back.
-B puts it into batch mode, so that you do not get MySQL's table layout.
-e executes the following statement.
-v controls the verbosity, could be used up to three times.
解释其工作原理:
首先,将生成KILL语句以及ID。
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
样本输出:
KILL 1061;
KILL 1059;
KILL 1057;
然后执行这些语句。
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
样本输出:
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
在Linux上,您可以使用类似的方法。
我的方法很简单。第一步,我们将“ show processlist”发送到我们的数据库。结果是包含所有已连接用户的列表。在下一步中,我们使用旧的grep命令来过滤用户名。使用awk,我们生成“ kill命令”。在最后一步中,我们将所有kill命令发送到mysql。一切都必须与|连接起来。符号。
mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot