También puede reiniciar mysqld, por ejemplo,sudo service mysqld restart
philfreo
Respuestas:
108
Necesita matarlos uno por uno, MySQL no tiene ningún comando de matar masivo. Puede escribirlo en cualquier idioma, por ejemplo, en PHP 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);}}
si no desea almacenar en un archivo, guárdelo en un variable
Simplemente ejecute 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")
esta es una muy mala idea ... en especial si tiene el motor de tabla configurado en la memoria, porque todos los datos se perderán ... o si usa el tipo de motor innodb, porque
rehacerá
8
También mata todo el proceso en todas las bases de datos
Diego Andrés Díaz Espinoza
10
No se vuelve más simple que esto, simplemente ejecute esto en el indicador de mysql.
killUSER username;
Matará todo el proceso bajo 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 de mysql.
¿En qué versión de MySQL existe esto? No lo veo documentado en la referencia de MySQL 5.7 ; no hay evidencia de que es posible matar por el usuario: KILL [CONNECTION | QUERY] processlist_id. Probé su consulta en MySQL 5.6.34 y se considera un error de sintaxis.
Birchlabs
4
He intentado esto en el indicador de 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 probablemente su respuesta sea una característica particular de MariaDB solamente.
Birchlabs
Esto no funciona para Mysql. Lea antes de publicar consejos relacionados con otros sistemas de base de datos ...
RyanH
7
A continuación, se creará un procedimiento almacenado simple que utiliza un cursor para matar todos los procesos uno por uno, excepto el proceso que se está utilizando actualmente:
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 ;
Se puede ejecutar con SELECTs para mostrar los procesos antes y después de la siguiente manera:
Recientemente necesitaba hacer esto y se me ocurrió esto
-- 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;
De esa forma, no es necesario almacenar para archivar y ejecutar todas las consultas con un solo comando.
PASO 2: Llame al procedimiento almacenado dándole el nombre de un usuario de la base de datos cuyos procesos desea eliminar. Puede reescribir el procedimiento almacenado para filtrar otros criterios si lo desea.
Hola. No estoy seguro de si eres un bot, una comunidad o un ser humano, pero de todos modos, sería genial si agregaras algunas palabras que expliquen lo que está sucediendo con esta línea de código y cómo resuelve el problema en cuestión.
Félix Gagnon-Grenier
1
Se agregaron -u y -p para dar acceso al usuario ... ¡el trabajo está bien!
Lord St John
2
Podemos hacerlo mediante MySQL Workbench. Simplemente ejecute esto:
Esto suena mejor respuesta ya que no se mencionó el lenguaje anteriormente.
DeshDeep Singh
0
Una forma fácil sería reiniciar el servidor mysql. Abra "services.msc" en Windows Ejecutar, seleccione Mysql de la lista. Haga clic derecho y detenga el servicio. Luego, comience de nuevo y todos los procesos habrían sido eliminados excepto uno (la conexión reservada predeterminada)
Consulta 1 seleccione concat ('KILL', id, ';') de information_schema.processlist donde usuario = 'nombre de usuario' en el archivo de salida '/tmp/a.txt';
Fuente de la consulta 2 a.txt
Esto le permitirá eliminar todas las consultas en mostrar lista de procesos por usuario específico.
sudo service mysqld restart
Respuestas:
Necesita matarlos uno por uno, MySQL no tiene ningún comando de matar masivo. Puede escribirlo en cualquier idioma, por ejemplo, en PHP puede usar algo como:
fuente
for i in {994..1145}; do mysql -uroot -p123456 -e "kill $i" ; done
La operación de matanza masiva ahorra tiempo. Hágalo en MySql mismo:
Ejecuta estos comandos
Referencia
si no desea almacenar en un archivo, guárdelo en un
variable
Simplemente ejecute en su símbolo del sistema
fuente
También he buscado cómo analizar a través de MySQL el comando SHOW PROCESSLIST y terminé con una línea en un Shell:
Puede ejecutar grep antes del comando awk para filtrar un nombre de base de datos en particular.
fuente
O ... con cáscara ...
Sí, lo sé, soy vago, pero también puede ser útil.
fuente
No se vuelve más simple que esto, simplemente ejecute esto en el indicador de mysql.
Matará todo el proceso bajo 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 de mysql.
fuente
KILL [CONNECTION | QUERY] processlist_id
. Probé su consulta en MySQL 5.6.34 y se considera un error de sintaxis.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
probablemente su respuesta sea una característica particular de MariaDB solamente.A continuación, se creará un procedimiento almacenado simple que utiliza un cursor para matar todos los procesos uno por uno, excepto el proceso que se está utilizando actualmente:
Se puede ejecutar con
SELECT
s para mostrar los procesos antes y después de la siguiente manera:fuente
Recientemente necesitaba hacer esto y se me ocurrió esto
De esa forma, no es necesario almacenar para archivar y ejecutar todas las consultas con un solo comando.
fuente
MATAR TODAS LAS CONSULTAS SELECCIONADAS
fuente
Si no tiene information_schema:
fuente
iniciar sesión en Mysql como administrador:
Y luego ejecutar el comando:
Obtendrá algo como a continuación:
Verá detalles completos de diferentes conexiones. Ahora puede eliminar la conexión para dormir como se muestra a continuación:
fuente
Este recorte funcionó para mí (servidor MySQL 5.5) para matar todos los procesos de MySQL:
fuente
Combinaría bash y mysql:
fuente
Aquí hay una solución que puede ejecutar sin depender del sistema operativo:
PASO 1: Cree un procedimiento almacenado.
PASO 2: Llame al procedimiento almacenado dándole el nombre de un usuario de la base de datos cuyos procesos desea eliminar. Puede reescribir el procedimiento almacenado para filtrar otros criterios si lo desea.
LLAMADA
kill_user_processes('devdba');
fuente
fuente
Podemos hacerlo mediante MySQL Workbench. Simplemente ejecute esto:
Ejemplo:
Eso lo eliminará.
fuente
Una forma fácil sería reiniciar el servidor mysql. Abra "services.msc" en Windows Ejecutar, seleccione Mysql de la lista. Haga clic derecho y detenga el servicio. Luego, comience de nuevo y todos los procesos habrían sido eliminados excepto uno (la conexión reservada predeterminada)
fuente
fuente
A veces tengo algunos procesos zombies mysql que no se pueden matar (usando MAMP Pro).
Primero obtenga una lista de todos los procesos de mysql:
Luego elimine a cada uno de ellos con (reemplace processId con la primera columna en el resultado del comando anterior):
fuente
Lo siguiente funcionó muy bien para mí:
fuente
Usé el comando
flush tables
para eliminar todas las conexiones inactivas que eran en realidad el problema masivo.fuente
para el lenguaje Python, puedes hacer esto
fuente
Si está utilizando laravel, esto es para usted:
Por supuesto, debe usar esto
use Illuminate\Support\Facades\DB;
después de su espacio de nombres.fuente
Consulta 1 seleccione concat ('KILL', id, ';') de information_schema.processlist donde usuario = 'nombre de usuario' en el archivo de salida '/tmp/a.txt';
Fuente de la consulta 2 a.txt
Esto le permitirá eliminar todas las consultas en mostrar lista de procesos por usuario específico.
fuente