Как я могу отключить клиентов от MySQL?

9

Мне нужен эффективный способ отключить всех клиентов с данным именем пользователя от MySQL. Я думал об изменении пароля пользователя, но думаю, что проверяется только при установлении соединения.

Идеи?

tmcallaghan
источник

Ответы:

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. Это должно быть реализовано по-другому для более старых версий MySQL, так как information_schema не имеет таблицы списка процессов.

Используемые параметры:

-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 вместе с идентификаторами.

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
dabest1
источник
Это гораздо более прямо для 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