matar todas las consultas - MySQL

17

A veces, durante un SNAFU, tengo que correr kill query xxxxxxxveinte o treinta veces. ¿Algún tipo de kill allcomando que me falta?

Debido a que no me gusta escribir.

JIStone
fuente
reiniciar el servidor?
Derek Downey
@DTest: ¿se puede hacer eso con una consulta? No tengo acceso directo al servidor.
JIStone
¡Esta es una pregunta que puede ser útil para otros desarrolladores y DBA (+1)!
RolandoMySQLDBA

Respuestas:

15

Desde la línea de comando de Linux

for PROC_TO_KILL in `mysql -h... -u... -p... -A --skip-column-names -e"SHOW PROCESSLIST" | grep -v "system user" | awk '{print $1}'` ; do mysql -h... -u... -p... -A --skip-column-names -e"KILL QUERY ${PROC_TO_KILL}" ; done

Puede cambiar la opción grep en el encabezado del bucle for para localizar un usuario específico o una cadena específica en la consulta.

Si tiene MySQL 5.1 donde la lista de procesos está en INFORMATION_SCHEMA, puede hacer esto para generar los comandos KILL QUERY en masa desde dentro del cliente mysql:

SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G

Puede hacer cláusulas WHERE en el campo INFO para buscar una consulta específica, el campo TIME en consultas de ejecución prolongada o el campo DB en una base de datos específica.

RolandoMySQLDBA
fuente
5
mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt';
Query OK, 2 rows affected (0.00 sec)

mysql> source /tmp/a.txt;
Query OK, 0 rows affected (0.00 sec)

http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/

philfreo
fuente
De hecho, me gusta este enfoque porque se puede hacer dentro de los límites del cliente mysql, independientemente de Linux o Windows. +1 !!!
RolandoMySQLDBA