Porque veo muchos procesos allí, y la columna "tiempo" muestra grandes valores para todos ellos.¿Cómo puedo matar todos los procesos en Mysql "show processlist"?
Respuesta
Tienes que matarlos uno por uno, MySQL no tiene ningún comando de muerte masiva. Puede que la escritura en cualquier idioma, por ejemplo en PHP se puede usar algo como:
$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);
}
}
que es una buena idea. Déjame intentar convertir eso a un script de shell en un cron ...! –
Shell 'para i en {994..1145}; do mysql -uroot -p123456 -e "kill $ i"; hecho' – zhuguowei
mysql -u -p -e "show processlist;" | grep Sleep | awk '{print $ 1}' | mientras lees LINE; do mysql -u -p -e "kill $ LINE"; hecho – user3770797
misa matar operación ahorra tiempo. Hacerlo por sí MySQL:
Ejecutar estos comandos
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------------
si no desea almacenar en archivo, guardar en un variable
Sólo tiene que ejecutar en su símbolo del sistema
> 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")
Por favor, recuerde consultar la fuente: http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/ –
@ArtemGoutsoul, pero no recuerdo que hice referencia a este sitio. Es mi propia tendencia de hacer esto. –
mi blog http://angelinnadar.blogspot.in/ donde puedes encontrar cosas similares –
también han buscado cómo analizar a través de MySQL el comando SHOW PROCESSLIST y terminó con una sola línea en una Shell:
mysqladmin processlist -u <USERNAME> -p<PASSWORD> | \
awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | \
mysql -u <USERNAME> -p<PASSWORD>
- processlist mysqladmin imprimirá una tabla con los identificadores de hilo;
- awk analizará desde la segunda columna solo los números (identificadores de subprocesos) y generará comandos MySQL KILL;
- y finalmente la última llamada a mysql ejecutará los comandos pasados.
Puede ejecutar grep antes del comando awk para filtrar un nombre de base de datos en particular.
Si usted no tiene INFORMATION_SCHEMA:
mysql -e "show full processlist" | cut -f1 | sed -e 's/^/kill /' | sed -e 's/$/;/' ; > /tmp/kill.txt mysql> . /tmp/kill.txt
de acceso a MySQL como administrador:
mysql -uroot -ppassword;
Y que ejecuta el comando:
mysql> show processlist;
Va a conseguir algo como abajo:
+----+-------------+--------------------+----------+---------+------+-------+------------------+
| 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 |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
Verás los detalles completos de las diferentes conexiones.Ahora se puede matar a la conexión de dormir de la siguiente manera:
mysql> kill 52;
Query OK, 0 rows affected (0.00 sec)
Esta no es la respuesta a la pregunta. Aquí está matando a un solo proceso, mientras que la pregunta es cómo puede matar el proceso de una vez. –
Si pudiera volver a votar esto de nuevo, lo haría – badbod99
matar a todas las consultas de selección
select concat('KILL ',id,';')
from information_schema.processlist
where user='root'
and INFO like 'SELECT%' into outfile '/tmp/a.txt';
source /tmp/a.txt;
Aquí es una solución que puede ejecutar sin depender del sistema operativo:
PASO 1: Crea un procedimiento almacenado.
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 ;
PASO 2: Llame al procedimiento almacenado que le da el nombre de un usuario de base de datos cuyos procesos desea eliminar. Podría reescribir el procedimiento almacenado para filtrar otros criterios si lo desea.
LLAMADA kill_user_processes('devdba');
Una manera fácil sería para reiniciar el servidor MySQL .. abierto "services.msc" en la ventana de Ejecutar, seleccione MySQL de la lista. Haga clic derecho y pare el servicio. A continuación, empezar de nuevo y todos los procesos que se han muerto, excepto el uno (el valor por defecto reservado conexión)
O ... con cáscara ...
service mysql restart
Sí, lo sé, soy vago, pero también puede ser útil.
esta es una muy mala idea ... en especial si tiene el motor de tabla configurado en la memoria, porque se perderán todos los datos ... o si usa el tipo de motor innodb, causa volverá a hacer todos los índices al reiniciar – HellBaby
También mata todo el proceso en todas las bases de datos –
mysqladmin pr -u 'USERNAME' -p'PASSWORD' | awk '$2~/^[0-9]+/{print $2}' | xargs -i mysqladmin -u 'USERNAME' -p'PASSWORD' kill {}
Hola. No estoy seguro si eres un bot, un miembro de la comunidad o un ser humano, pero de todos modos, sería genial si agregases algunas palabras para explicar qué está pasando con esta línea de código y cómo resuelve el problema. –
Hola, por favor haga una pregunta ... – user3721740
Agregué el -u y -p para dar acceso al usuario ... ¡el trabajo está bien! –
recientemente que tenía que hacer esto y se me ocurrió con esta
-- 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;
De esta manera, no es necesario almacenar en un archivo y ejecutar todas las consultas con un solo comando.
Consultar 1 seleccionar concat ('KILL', id, ';') de information_schema.processlist donde user = 'username' en el archivo '/tmp/a.txt';
Consulta 2 fuente a.txt
Esto permitirá que mates a todas las consultas de espectáculo processlist por el usuario específico.
Me upvoted luego me di cuenta de que acaba de copiar la respuesta a continuación rofl; https://stackoverflow.com/a/21547386/3652863 –
FYI era de mi propiedad, pero lo que sea. –
#! /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;
Esta cortó trabajó para mí (servidor MySQL 5.5) para matar todos los procesos de MySQL:
mysql -e "show full processlist;" -ss | awk '{print "KILL "$1";"}'| mysql
Lo siguiente creará un procedimiento almacenado simple que utiliza un cursor para matar todos los procesos, uno por uno, excepto para el proceso que está siendo actualmente utilizado:
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 ;
se puede ejecutar con SELECT
s para mostrar los procesos antes y después de la siguiente manera:
SELECT * FROM information_schema.processlist;
CALL kill_other_processes();
SELECT * FROM information_schema.processlist;
No hay nada más sencillo que esto, simplemente ejecute esto en el indicador mysql.
kill USER username;
Matará todo el proceso con el nombre de usuario proporcionado. porque la mayoría de la gente usa el mismo usuario para todos los propósitos, ¡funciona!
He probado esto en MariaDB no estoy seguro sobre mysql.
¿En qué versión de MySQL existe esto?No lo veo documentado en la [referencia de MySQL 5.7] (https://dev.mysql.com/doc/refman/5.7/en/kill.html); no hay evidencia de que sea posible matar por el usuario: 'KILL [CONNECTION | QUERY] processlist_id'. Intenté tu consulta en MySQL 5.6.34 y se consideró un error de sintaxis. – Birchlabs
https://pasteboard.co/GCvdYVk.png –
He intentado esto en el indicador de MySQL 5.6.34: 'mysql> kill user root; ERROR 1064 (42000): Tiene un error en la sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'root' en la línea 1' Probablemente su respuesta sea una característica exclusiva de MariaDB. – Birchlabs
A veces tengo algunos procesos zombies mysql que no se pueden matar (usando MAMP Pro).
En primer lugar obtener una lista de todos los procesos de MySQL:
ps -ax | grep mysql
Siguiente matar a cada uno de ellos con (sustituir processId con la primera columna de los resultados anteriores de comandos):
kill -9 processId
La siguiente trabajados ideal para mí:
echo "show processlist" | mysql | grep -v ^Id | awk '{print $1}' | xargs -i echo "KILL {}; | mysql"
He utilizado el comando flush tables
para matar a todos los i conexiones nactivas que en realidad son el problema de masas.
Podemos hacerlo mediante MySQL Workbench. Sólo hay que ejecutar esto:
kill id;
Ejemplo:
kill 13412
Eso lo eliminará.
- 1. Cómo ver la consulta completa de SHOW PROCESSLIST
- 2. MySQL - ¿CÓMO MOSTRAR LA LISTA DE PROCESOS solo con los procesos del usuario actual?
- 3. ¿Cómo puedo matar un árbol de procesos completo con Perl?
- 4. ¿Cuál es el equivalente de 'SHOW PROCESSLIST' de mysql en el servidor SQL?
- 5. ¿Cómo se enumeran todos los procesos secundarios en python?
- 6. ¿Cómo matar procesos por nombre? (Win32 API)
- 7. Cómo matar todos los subprocesos de shell?
- 8. cómo matar procesos y procesos secundarios de python?
- 9. enumerando todos los procesos en iOS 5.0.1
- 10. La lista de procesos show de Mysql enumera muchos procesos sleep e info = null?
- 11. ¿Cómo encontrar todos los procesos secundarios?
- 12. Cómo matar un árbol de procesos en Windows
- 13. ¿Cómo puedo encontrar todos los disparadores db en MYSQL?
- 14. cómo matar (o evitar) procesos zombie con módulo de subproceso
- 15. Mysql show create constraint?
- 16. Cómo matar las conexiones de MySQL
- 17. Muchos de los procesos de suspensión mysql
- 18. Cómo matar a todos los hijos del shell actual en la interrupción?
- 19. mySQL show database for user
- 20. ¿Cómo puedo enumerar todos los procesos que se ejecutan en Windows?
- 21. En MySQL, ¿cómo puedo eliminar/vaciar/borrar todos los registros que no son necesarios?
- 22. Cómo puedo matar un hilo en python
- 23. Esperando en PowerShell para que finalicen todos los procesos secundarios
- 24. Perdí todos los privilegios en MYSQL
- 25. MySQL deshabilita todos los desencadenantes
- 26. ¿Cómo borrar todos los registros huérfanos en MySQL?
- 27. ¿Cómo puedo visualizar todos los valores posibles en un SuggestBox?
- 28. ¿Cómo matar un proceso nohup?
- 29. Reemplazar todos los campos en MySQL
- 30. Java Garbage Collection detiene todos los procesos de Java
También puede reiniciar mysqld, por ejemplo, 'sudo service mysqld restart' – philfreo