MySQLからクライアントを切断するにはどうすればよいですか?


9

MySQLから特定のユーザー名ですべてのクライアントを切断する効率的な方法が必要です。ユーザーのパスワードを変更することを考えましたが、接続が確立されたときにのみチェックされると思います。

アイデア?

回答:


7

以下の「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

これはMySQL 5.5の方がはるかに直接的です。+1 !!!
RolandoMySQLDBA

1

Linuxでは、そのようなものを使用できます。

私のアプローチは非常に簡単です。最初のステップでは、「show processlist」をデータベースに送信します。結果は、接続されているすべてのユーザーのリストです。次のステップでは、古き良きgrepコマンドを使用してユーザー名をフィルタリングします。awkを使用して、「killコマンド」を生成します。最後のステップでは、すべてのkillコマンドをmysqlに送信します。すべてを|と連結する必要があります。シンボル。

mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot

このコードに簡単な説明を追加するとよいでしょう。
RLF 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.