如何断开客户端与 MySQL 的连接?

tmc*_*han 10 mysql

我需要一种有效的方法来断开具有给定用户名的所有客户端与 MySQL 的连接。我想过更改用户密码,但我认为只有在建立连接时才会检查。

想法?

dab*_*st1 7

您可以使用下面的“SQL to SQL”方法(只需根据需要将额外的连接选项传递给 mysql 客户端):

shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Run Code Online (Sandbox Code Playgroud)

注意:这适用于 MySQL 5.1 和 5.5。对于较旧的 MySQL 版本,这必须以不同的方式实现,因为 information_schema 没有 processlist 表。

使用的选项:

-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.
Run Code Online (Sandbox Code Playgroud)

工作原理说明:

首先,KILL 语句与 ID 一起生成。

shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
Run Code Online (Sandbox Code Playgroud)

示例输出:

KILL 1061;
KILL 1059;
KILL 1057;
Run Code Online (Sandbox Code Playgroud)

然后执行这些语句。

shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Run Code Online (Sandbox Code Playgroud)

示例输出:

--------------
KILL 1061
--------------

Query OK, 0 rows affected

--------------
KILL 1059
--------------

Query OK, 0 rows affected

--------------
KILL 1057
--------------

Query OK, 0 rows affected
Run Code Online (Sandbox Code Playgroud)