Perché vedo un sacco di processi lì, e la colonna "tempo" mostra grandi valori per tutti loro.Come si eliminano tutti i processi in Mysql "show processlist"?
risposta
È necessario ucciderli uno per uno, MySQL non ha alcun comando di uccisione. È possibile che lo script in qualsiasi lingua, per esempio in PHP è possibile usare qualcosa come:
$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);
}
}
è una buona idea. Fammi provare a convertirlo in uno script di shell su un cron ...! –
Shell 'per i in {994..1145}; do mysql -uroot -p123456 -e "kill $ i"; done' – zhuguowei
mysql -u -p -e "show processlist;" | grep Sleep | awk '{print $ 1}' | mentre leggi LINE; do mysql -u -p -e "kill $ LINE"; fatto – user3770797
Messa uccidendo operazione consente di risparmiare tempo. Farlo in MySql sé:
eseguire questi comandi
mysql> select concat('KILL ',id,';') from information_schema.processlist
where user='root' and time > 200 into outfile '/tmp/a.txt';
mysql> source /tmp/a.txt;
---------edit------------
se non si desidera memorizzare in un file, conservare in un variable
Basta eseguire nella vostra prompt dei comandi
> 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")
Ricordare di fare riferimento alla fonte: http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/ –
@ArtemGoutsoul ma non ricordo che mi sono riferito a questo sito. È la mia tendenza a farlo. –
il mio blog http://angelinnadar.blogspot.in/ dove si possono pinne cose simili –
ho anche cercato come analizzare attraverso MySQL il comando SHOW PROCESSLIST e si è concluso con una battuta in uno Shell:
mysqladmin processlist -u <USERNAME> -p<PASSWORD> | \
awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | \
mysql -u <USERNAME> -p<PASSWORD>
- mysqladmin processlist stamperà un tavolo con gli ID di filo;
- awk analizzerà dalla seconda colonna solo i numeri (id di thread) e genererà i comandi di MySQL KILL;
- e infine l'ultima chiamata a mysql eseguirà i comandi passati.
È possibile eseguire grep prima che il comando diawk per filtrare un particolare nome del database.
Se non si dispone di information_schema:
mysql -e "show full processlist" | cut -f1 | sed -e 's/^/kill /' | sed -e 's/$/;/' ; > /tmp/kill.txt mysql> . /tmp/kill.txt
login a MySQL come admin:
mysql -uroot -ppassword;
E comando che esegue:
mysql> show processlist;
Otterrete qualcosa come di seguito:
+----+-------------+--------------------+----------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
| 49 | application | 192.168.44.1:51718 | XXXXXXXX | Sleep | 183 | | NULL ||
| 55 | application | 192.168.44.1:51769 | XXXXXXXX | Sleep | 148 | | NULL |
| 56 | application | 192.168.44.1:51770 | XXXXXXXX | Sleep | 148 | | NULL |
| 57 | application | 192.168.44.1:51771 | XXXXXXXX | Sleep | 148 | | NULL |
| 58 | application | 192.168.44.1:51968 | XXXXXXXX | Sleep | 11 | | NULL |
| 59 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
Vedrete i dettagli completi delle diverse connessioni.Ora si può uccidere la connessione a pelo, come di seguito:
mysql> kill 52;
Query OK, 0 rows affected (0.00 sec)
Questa non è la risposta alla domanda. Qui stai uccidendo un singolo processo mentre la domanda è come puoi uccidere il processo in una sola volta. –
Se potessi downvotare di nuovo questo, vorrei – badbod99
uccidere tutti query di selezione
select concat('KILL ',id,';')
from information_schema.processlist
where user='root'
and INFO like 'SELECT%' into outfile '/tmp/a.txt';
source /tmp/a.txt;
Ecco una soluzione che è possibile eseguire senza fare affidamento sul sistema operativo:
FASE 1: Creare una stored procedure.
DROP PROCEDURE IF EXISTS kill_user_processes$$
CREATE PROCEDURE `kill_user_processes`(
IN user_to_kill VARCHAR(255)
)
READS SQL DATA
BEGIN
DECLARE name_val VARCHAR(255);
DECLARE no_more_rows BOOLEAN;
DECLARE loop_cntr INT DEFAULT 0;
DECLARE num_rows INT DEFAULT 0;
DECLARE friends_cur CURSOR FOR
SELECT CONCAT('KILL ',id,';') FROM information_schema.processlist WHERE USER=user_to_kill;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_rows = TRUE;
OPEN friends_cur;
SELECT FOUND_ROWS() INTO num_rows;
the_loop: LOOP
FETCH friends_cur
INTO name_val;
IF no_more_rows THEN
CLOSE friends_cur;
LEAVE the_loop;
END IF;
SET @s = name_val;
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT name_val;
SET loop_cntr = loop_cntr + 1;
END LOOP the_loop;
SELECT num_rows, loop_cntr;
END $$
DELIMITER ;
FASE 2: chiamare la stored procedure dandogli il nome di un utente del database i cui processi si vuole uccidere. È possibile riscrivere la procedura memorizzata per filtrare su altri criteri, se lo si desidera.
CALL kill_user_processes('devdba');
Un modo semplice sarebbe quella di riavviare il server MySQL .. Open "services.msc" in Windows Run, selezionare Mysql dalla lista. Fare clic destro e interrompere il servizio. Poi ricominciare e tutti i processi sarebbero stati uccisi ad eccezione di quella (l'impostazione predefinita riservata connessione)
Oppure ... in guscio ...
service mysql restart
Sì, lo so, sono pigro, ma può essere utile anche.
questa è una pessima idea ... in particolare se hai il motore del tavolo impostato sulla memoria, perché tutti i dati andranno persi ... o se usi il tipo di motore innodb, causa rifarà tutti gli indici al riavvio – HellBaby
Inoltre uccide tutti i processi su tutti i database –
mysqladmin pr -u 'USERNAME' -p'PASSWORD' | awk '$2~/^[0-9]+/{print $2}' | xargs -i mysqladmin -u 'USERNAME' -p'PASSWORD' kill {}
Ehi lì. Non sono sicuro che tu sia un robot, una community o un umano, ma sarebbe fantastico se tu aggiungessi alcune parole che spiegano cosa sta succedendo con questa linea di codice e come risolve il problema in questione? –
Ciao, pls fai una domanda ... – user3721740
Aggiunti -u e -p per dare accesso all'utente ... il lavoro va bene! –
Recentemente ho bisogno di fare questo e mi si avvicinò con questo
-- GROUP_CONCAT turns all the rows into 1
-- @q:= stores all the kill commands to a variable
select @q:=GROUP_CONCAT(CONCAT('KILL ',ID) SEPARATOR ';')
FROM information_schema.processlist
-- If you don't need it, you can remove the WHERE command altogether
WHERE user = 'user';
-- Creates statement and execute it
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
In questo modo, non è necessario memorizzare in un file ed eseguire tutte le query con un singolo comando.
Query 1 selezionare concat ('KILL', id, ';') da information_schema.processlist dove user = 'username' in outfile '/tmp/a.txt';
Query 2 fonte a.txt
Questo vi permetterà di uccidere tutte le query nel mondo dello spettacolo processlist da utente specifico.
Ho svitato quindi mi sono reso conto che hai appena copiato la risposta sotto rofl; https://stackoverflow.com/a/21547386/3652863 –
FYI era del mio, ma qualunque cosa. –
#! /bin/bash
if [ $# != "1" ];then
echo "Not enough arguments.";
echo "Usage: killQueryByDB.sh <db_name>";
exit;
fi;
DB=${1};
for i in `mysql -u <user> -h localhost ${DB} -p<password> -e "show processlist" | sed 's/\(^[0-9]*\).*/\1/'`; do
echo "Killing query ${i}";
mysql -u <user> -h localhost ${DB} -p<password> -e "kill query ${i}";
done;
Questo snipped ha funzionato per me (server MySQL 5.5) per uccidere tutti i processi di MySQL:
mysql -e "show full processlist;" -ss | awk '{print "KILL "$1";"}'| mysql
Quanto segue creare un semplice stored procedure che utilizza un cursore per uccidere tutti i processi ad uno ad uno, tranne per il processo attualmente utilizzato:
DROP PROCEDURE IF EXISTS kill_other_processes;
DELIMITER $$
CREATE PROCEDURE kill_other_processes()
BEGIN
DECLARE finished INT DEFAULT 0;
DECLARE proc_id INT;
DECLARE proc_id_cursor CURSOR FOR SELECT id FROM information_schema.processlist;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
OPEN proc_id_cursor;
proc_id_cursor_loop: LOOP
FETCH proc_id_cursor INTO proc_id;
IF finished = 1 THEN
LEAVE proc_id_cursor_loop;
END IF;
-- build email list
IF proc_id <> CONNECTION_ID() THEN
KILL proc_id;
END IF;
END LOOP proc_id_cursor_loop;
CLOSE proc_id_cursor;
END$$
DELIMITER ;
e può essere eseguito con SELECT
s per mostrare i processi prima e dopo la seguente:
SELECT * FROM information_schema.processlist;
CALL kill_other_processes();
SELECT * FROM information_schema.processlist;
Non è più semplice di questo, Esegui questo nel prompt mysql.
kill USER username;
ucciderà tutti i processi sotto fornito nome utente. perché la maggior parte delle persone usa lo stesso utente per tutti gli scopi, funziona!
Ho provato questo su MariaDB non sono sicuro di mysql.
In quale versione di MySQL esiste?Non lo vedo documentato nel [riferimento a MySQL 5.7] (https://dev.mysql.com/doc/refman/5.7/en/kill.html); non ci sono prove che sia possibile uccidere per utente: 'KILL [CONNECTION | QUERY] processlist_id'. Ho provato la tua query in MySQL 5.6.34 ed è considerato un errore di sintassi. – Birchlabs
https://pasteboard.co/GCvdYVk.png –
Ho provato questo nel prompt di MySQL 5.6.34: 'mysql> kill root utente; ERRORE 1064 (42000): si è verificato un errore nella sintassi SQL; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'root' alla riga 1' Probabilmente la tua risposta è una funzione particolare solo per MariaDB. – Birchlabs
A volte ho alcuni processi mysql di zombi che non possono essere uccisi (usando MAMP Pro).
Prima ottenere un elenco di tutti i processi di MySQL:
ps -ax | grep mysql
Avanti uccidere ognuno di loro con (sostituire ProcessId con la prima colonna precedente risultato di comando):
kill -9 processId
Il seguente lavorate grande per me:
echo "show processlist" | mysql | grep -v ^Id | awk '{print $1}' | xargs -i echo "KILL {}; | mysql"
ho usato il comando flush tables
di uccidere tutti i connessioni nattive che in realtà sono il problema di massa.
Possiamo farlo tramite MySQL Workbench. Basta eseguire questo:
kill id;
Esempio:
kill 13412
che rimuoverà esso.
- 1. SHOW PROCESSLIST al comando di MySQL: il sonno
- 2. MySQL: ordine "SHOW TABLES"
- 3. Come si elencano tutti i processi figli in python?
- 4. Qual è l'equivalente di "SHOW PROCESSLIST" di mysql sul server SQL?
- 5. come si eliminano i client redis inattivi
- 6. Come trovare tutti i processi figli?
- 7. elencando tutti i processi in iOS 5.0.1
- 8. Come si eliminano i canali core.async di clojure?
- 9. Come si eliminano tutti i controlli in un pannello o modulo in UNA VOLTA ??? C#
- 10. Come si eliminano tutti i vincoli di chiave esterna in una tabella in Sql Server 2000?
- 11. Come eliminare tutti i processi figlio all'uscita?
- 12. Come si eliminano tutti i dati in una famiglia di colonne Cassandra?
- 13. Come si eliminano tutti i segni di punteggiatura iniziali e finali in Python?
- 14. Come si eliminano tutti i file in una cartella Archiviazione file di Azure?
- 15. Pycharm: termina tutti i processi in esecuzione
- 16. I processi Apache/PHP si bloccano durante l'interazione con MySQL
- 17. Come si eliminano i record di massa in Grails/GORM?
- 18. Come si elencano tutti i trigger in un database MySQL?
- 19. Come si eliminano i pannelli vuoti da eclissi?
- 20. Come uccidere tutti i processi in background in zsh?
- 21. Come si eliminano le righe in Yii2?
- 22. Come si eliminano i grafici correnti (ma non tutti) nel dispositivo di stampa RStudio?
- 23. Come ottenere tutti i processi in un display da Xvfb?
- 24. Come si eliminano i database SQL? sp_delete_database_backuphistory woes
- 25. Come si eliminano gli errori di convalida in Eclipse?
- 26. Mysql show crea un vincolo?
- 27. MySQL è lento quando si eliminano i record nella tabella grande
- 28. Elenco di tutti i processi in esecuzione in Contiki OS
- 29. Come posso terminare tutti i processi di subshell?
- 30. Come uccidere tutti i processi con un determinato nome parziale?
È anche possibile riavviare mysqld, ad es., 'Sudo service mysqld restart' – philfreo