¿Cómo puedo detener una consulta MySQL en ejecución?


Me conecto a mysql desde mi shell de Linux. De vez en cuando corro una consulta SELECT que es demasiado grande. Imprime y imprime y ya sé que esto no es lo que quería decir. Me gustaría detener la consulta.

Golpear Ctrl+C (un par de veces) mata mysql completamente y me lleva de vuelta a shell, así que tengo que volver a conectarme.

¿Es posible detener una consulta sin matar a mysql?

Author: Eric Leschinski, 2010-09-24

6 answers

mysql>show processlist;

mysql> kill "number from first col";
 382
Author: baklarz2048,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-05 23:07:58

Solo para añadir

KILL QUERY **Id** donde Id es id de conexión desde show processlist

Es más preferible si no desea matar la conexión generalmente cuando se ejecuta desde alguna aplicación.

Para más detalles puede leer mysql doc aquí

 60
Author: mtariq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-22 12:32:22

Conectar a mysql

mysql -uusername -p  -hhostname

Mostrar lista de procesos completa:

mysql> show full processlist;
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| Id      | User   | Host              | db      | Command | Time | State | Info             |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| 9255451 | logreg | dmin001.ops:37651 | logdata | Query   |    0 | NULL  | show processlist |
+---------+--------+-------------------+---------+---------+------+-------+------------------+

Elimina la consulta específica. Aquí id=9255451

mysql> kill 9255451;

Si obtiene permiso denegado, pruebe este SQL:

CALL mysql.rds_kill(9255451)
 32
Author: minhas23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-29 07:09:07

Use mysqladmin para eliminar la consulta runaway:

Ejecute los siguientes comandos:

mysqladmin -uusername -ppassword pr

Luego anote el id del proceso.

mysqladmin -uusername -ppassword kill pid

La consulta runaway ya no debería consumir recursos.

 11
Author: minhas23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-28 22:07:38

Si tiene mysqladmin disponible, puede obtener la lista de consultas con:

> mysqladmin -uUSERNAME -pPASSWORD pr

+-----+------+-----------------+--------+---------+------+--------------+------------------+
| Id  | User | Host            | db     | Command | Time | State        | Info             |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
| 137 | beet | localhost:53535 | people | Query   | 292  | Sending data | DELETE FROM      |
| 145 | root | localhost:55745 |        | Query   | 0    |              | show processlist |
+-----+------+-----------------+--------+---------+------+--------------+------------------+

Entonces puede detener el proceso mysql que está alojando la consulta de larga duración:

> mysqladmin -uUSERNAME -pPASSWORD kill 137
 8
Author: Rudy Lattae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-23 15:29:20

El autor de esta pregunta menciona que por lo general es solo después de MySQL imprime su salida que se da cuenta de que la consulta incorrecta fue ejecutada. Como se ha señalado, en este caso, Ctrl-C no ayuda. Sin embargo, he notado que abortará la consulta actual {[8–} - si la captura antes de cualquier salida es impreso. Por ejemplo:

mysql> select * from jos_users, jos_comprofiler;

MySQL se ocupa de generar el Producto Cartesiano de las dos tablas anteriores y pronto se dará cuenta de que MySQL no ha impreso ninguna salida a la pantalla (proceso el estado es Enviando datos ) así que escribe Ctrl-C:

Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

Ctrl-C también se puede usar para detener una consulta UPDATE.

 0
Author: Anthony Geoghegan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-16 09:25:49