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?

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

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

Dobrze byłoby dodać krótkie wyjaśnienie tego kodu.
RLF,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.