Możesz także zrestartować mysqld, np.sudo service mysqld restart
philfreo
Odpowiedzi:
108
Musisz zabijać je jeden po drugim, MySQL nie ma żadnego ogromnego polecenia zabicia. Możesz napisać skrypt w dowolnym języku, na przykład w PHP możesz użyć czegoś takiego:
$result = mysql_query("SHOW FULL PROCESSLIST");while($row=mysql_fetch_array($result)){$process_id=$row["Id"];if($row["Time"]>200){$sql="KILL $process_id";
mysql_query($sql);}}
jeśli nie chcesz przechowywać w pliku, zapisz w pliku variable
Po prostu uruchom w wierszu poleceń
> out1=$(mysql -B test -uroot -proot --disable-column-names -e "select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200;")> out2=$(mysql -B test -uroot -proot --disable-column-names -e "$out1")
to jest bardzo zły pomysł ... szczególnie jeśli masz silnik tabeli ustawiony na pamięci, ponieważ wszystkie dane zostaną utracone ... lub jeśli użyjesz silnika typu innodb, ponieważ spowoduje to ponowne wykonanie wszystkich indeksów przy restarcie
HellBaby
8
Również zabija cały proces we wszystkich bazach danych
Diego Andrés Díaz Espinoza
9
Tylko dla mariaDB
Nie jest to prostsze niż to, po prostu wykonaj to w zachęcie mysql.
killUSER username;
Zabije cały proces pod podaną nazwą użytkownika. ponieważ większość ludzi używa tego samego użytkownika do wszystkich celów, to działa!
Przetestowałem to na MariaDB nie jestem pewien co do mysql.
W której wersji MySQL to istnieje? Nie widzę tego w dokumentacji MySQL 5.7 ; Nie ma dowodów, że to możliwe, aby zabić przez użytkownika: KILL [CONNECTION | QUERY] processlist_id. Wypróbowałem twoje zapytanie w MySQL 5.6.34 i jest uważane za błąd składni.
Birchlabs,
4
Wypróbowałem to w zachęcie MySQL 5.6.34: mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1 Prawdopodobnie twoja odpowiedź dotyczy tylko funkcji MariaDB.
Birchlabs,
To nie działa w przypadku MySQL. Proszę przeczytać przed wysłaniem porad dotyczących innych systemów DB ...
RyanH
7
Poniższe spowoduje utworzenie prostej procedury składowanej, która używa kursora do zabijania wszystkich procesów jeden po drugim, z wyjątkiem aktualnie używanego procesu:
DROPPROCEDUREIFEXISTS kill_other_processes;
DELIMITER $$CREATEPROCEDURE kill_other_processes()BEGINDECLARE finished INT DEFAULT0;DECLARE proc_id INT;DECLARE proc_id_cursor CURSORFORSELECT id FROM information_schema.processlist;DECLARECONTINUE HANDLER FORNOT FOUND SET finished =1;OPEN proc_id_cursor;
proc_id_cursor_loop: LOOP
FETCH proc_id_cursor INTO proc_id;IF finished =1THEN
LEAVE proc_id_cursor_loop;ENDIF;IF proc_id <> CONNECTION_ID()THENKILL proc_id;ENDIF;END LOOP proc_id_cursor_loop;CLOSE proc_id_cursor;END$$
DELIMITER ;
Można go uruchomić za pomocą SELECTs, aby wyświetlić procesy przed i po w następujący sposób:
-- GROUP_CONCAT turns all the rows into 1-- @q:= stores all the kill commands to a variableselect@q:=GROUP_CONCAT(CONCAT('KILL ',ID) SEPARATOR ';')FROM information_schema.processlist
-- If you don't need it, you can remove the WHERE command altogetherWHEREuser='user';-- Creates statement and execute it
PREPARE stmt FROM@q;EXECUTE stmt;DEALLOCATE PREPARE stmt;
W ten sposób nie musisz przechowywać w pliku i uruchamiać wszystkich zapytań za pomocą jednego polecenia.
KROK 2: Wywołaj procedurę składowaną, podając nazwę użytkownika bazy danych, którego procesy chcesz zabić. Jeśli chcesz, możesz przepisać procedurę składowaną, aby filtrować według innych kryteriów.
No hej. Nie jesteś pewien, czy jesteś botem, społecznością czy człowiekiem, ale tak czy inaczej, byłoby wspaniale, gdybyś dodał kilka słów wyjaśniających, co się dzieje z tą linią kodu i jak rozwiązuje on problem?
Félix Gagnon-Grenier
1
Dodano -u i -p, aby dać dostęp użytkownikowi ... wszystko w porządku!
Lord St John
2
Możemy to zrobić za pomocą MySQL Workbench. Po prostu wykonaj to:
To brzmi lepiej, ponieważ nie wspomniano powyżej języka.
DeshDeep Singh,
0
Łatwym sposobem byłoby ponowne uruchomienie serwera mysql. Otwórz "services.msc" w systemie Windows Uruchom, wybierz Mysql z listy. Kliknij prawym przyciskiem myszy i zatrzymaj usługę. Następnie Uruchom ponownie, a wszystkie procesy zostałyby zabite z wyjątkiem jednego (domyślne połączenie zarezerwowane)
sudo service mysqld restart
Odpowiedzi:
Musisz zabijać je jeden po drugim, MySQL nie ma żadnego ogromnego polecenia zabicia. Możesz napisać skrypt w dowolnym języku, na przykład w PHP możesz użyć czegoś takiego:
źródło
for i in {994..1145}; do mysql -uroot -p123456 -e "kill $i" ; done
Operacja masowego zabijania oszczędza czas. Zrób to w samym MySql:
Uruchom te polecenia
Odniesienie
jeśli nie chcesz przechowywać w pliku, zapisz w pliku
variable
Po prostu uruchom w wierszu poleceń
źródło
Szukałem również, jak przeanalizować MySQL polecenie POKAŻ LISTĘ PROCESÓW i zakończyło się jednym wierszem w powłoce:
Możesz uruchomić grep przed komendą awk, aby przefiltrować określoną nazwę bazy danych.
źródło
Albo ... w skorupce ...
Tak, wiem, jestem leniwy, ale to też może być przydatne.
źródło
Tylko dla mariaDB
Nie jest to prostsze niż to, po prostu wykonaj to w zachęcie mysql.
Zabije cały proces pod podaną nazwą użytkownika. ponieważ większość ludzi używa tego samego użytkownika do wszystkich celów, to działa!
Przetestowałem to na MariaDB nie jestem pewien co do mysql.
źródło
KILL [CONNECTION | QUERY] processlist_id
. Wypróbowałem twoje zapytanie w MySQL 5.6.34 i jest uważane za błąd składni.mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1
Prawdopodobnie twoja odpowiedź dotyczy tylko funkcji MariaDB.Poniższe spowoduje utworzenie prostej procedury składowanej, która używa kursora do zabijania wszystkich procesów jeden po drugim, z wyjątkiem aktualnie używanego procesu:
Można go uruchomić za pomocą
SELECT
s, aby wyświetlić procesy przed i po w następujący sposób:źródło
Niedawno musiałem to zrobić i wymyśliłem to
W ten sposób nie musisz przechowywać w pliku i uruchamiać wszystkich zapytań za pomocą jednego polecenia.
źródło
ZABIJ WSZYSTKIE WYBRANE PYTANIA
źródło
Jeśli nie masz information_schema:
źródło
zaloguj się do MySQL jako admin:
A potem uruchom polecenie:
Otrzymasz coś takiego jak poniżej:
Zobaczysz pełne szczegóły różnych połączeń. Teraz możesz zabić połączenie do spania, jak poniżej:
źródło
Ten fragment działał dla mnie (serwer MySQL 5.5), aby zabić wszystkie procesy MySQL:
źródło
Połączyłbym bash i mysql:
źródło
Oto rozwiązanie, które możesz wykonać bez polegania na systemie operacyjnym:
KROK 1: Utwórz procedurę składowaną.
KROK 2: Wywołaj procedurę składowaną, podając nazwę użytkownika bazy danych, którego procesy chcesz zabić. Jeśli chcesz, możesz przepisać procedurę składowaną, aby filtrować według innych kryteriów.
POŁĄCZENIE
kill_user_processes('devdba');
źródło
źródło
Możemy to zrobić za pomocą MySQL Workbench. Po prostu wykonaj to:
Przykład:
To go usunie.
źródło
Łatwym sposobem byłoby ponowne uruchomienie serwera mysql. Otwórz "services.msc" w systemie Windows Uruchom, wybierz Mysql z listy. Kliknij prawym przyciskiem myszy i zatrzymaj usługę. Następnie Uruchom ponownie, a wszystkie procesy zostałyby zabite z wyjątkiem jednego (domyślne połączenie zarezerwowane)
źródło
źródło
Czasami mam procesy mysql zombie, których nie można zabić (przy użyciu MAMP Pro).
Najpierw pobierz listę wszystkich procesów mysql:
Następnie zabij każdy z nich (zamień processId na pierwszą kolumnę w wyniku poprzedniego polecenia):
źródło
Następujące działały dla mnie świetnie:
źródło
Użyłem polecenia,
flush tables
aby zabić wszystkie nieaktywne połączenia, które są w rzeczywistości problemem masy.źródło
w przypadku języka python można to zrobić w ten sposób
źródło
Jeśli używasz laravel, to jest to dla Ciebie:
Oczywiście powinieneś użyć tego
use Illuminate\Support\Facades\DB;
po swojej przestrzeni nazw.źródło
Zapytanie 1 wybierz concat ('KILL', id, ';') z information_schema.processlist gdzie user = 'username' do outfile '/tmp/a.txt';
Zapytanie 2 źródło a.txt
Umożliwi to zabicie wszystkich zapytań w show processlist przez określonego użytkownika.
źródło