Jak mogę odłączyć klientów od MySQL?

9

Potrzebuję skutecznego sposobu na odłączenie wszystkich klientów o podanej nazwie użytkownika od MySQL. Myślałem o zmianie hasła użytkownika, ale myślę, że jest to sprawdzane tylko po nawiązaniu połączenia.

Pomysły?

tmcallaghan
źródło

Odpowiedzi:

7

Możesz użyć poniższej metody „SQL to SQL” (w razie potrzeby przekaż dodatkowe opcje połączenia klientowi mysql):

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

Uwaga: Działa to z MySQL 5.1 i 5.5. Musi to zostać zaimplementowane inaczej w starszych wersjach MySQL, ponieważ informacje nie zawierają tabeli list procesów.

Zastosowane opcje:

-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.

Wyjaśnienie, jak to działa:

Najpierw generowane są instrukcje KILL wraz z identyfikatorami.

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

Przykładowe dane wyjściowe:

KILL 1061;
KILL 1059;
KILL 1057;

Następnie te instrukcje są wykonywane.

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

Przykładowe dane wyjściowe:

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

Query OK, 0 rows affected

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

Query OK, 0 rows affected

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

Query OK, 0 rows affected
dabest1
źródło
Jest to o wiele bardziej bezpośrednie w przypadku MySQL 5.5. +1 !!!
RolandoMySQLDBA
1

W systemie Linux możesz użyć czegoś takiego.

Moje podejście jest bardzo proste. W pierwszym kroku wysyłamy „pokaż listę procesów” do naszej bazy danych. Rezultatem jest lista wszystkich podłączonych użytkowników. W następnym kroku używamy starej dobrej komendy grep do filtrowania nazw użytkowników. Za pomocą awk generujemy „polecenie zabicia”. W ostatnim kroku wysyłamy wszystkie polecenia kill do mysql. Wszystko musi być połączone z | symbol.

mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot
Marcel Zebrowski
źródło
Dobrze byłoby dodać krótkie wyjaśnienie tego kodu.
RLF,