tuer toutes les requêtes - MySQL

17

Parfois, lors d'un SNAFU, je dois courir kill query xxxxxxxvingt ou trente fois. Une sorte de kill allcommande me manque?

En raison de la façon dont je n'aime pas taper.

JIStone
la source
redémarrer le serveur?
Derek Downey
@DTest - cela peut-il être fait avec une requête? Je n'ai pas d'accès direct au serveur.
JIStone
C'est une question qui peut être utile pour d'autres développeurs et DBA (+1) !!!
RolandoMySQLDBA

Réponses:

15

Depuis la ligne de commande 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

Vous pouvez modifier l'option grep dans l'en-tête de la boucle for pour localiser un utilisateur spécifique ou une chaîne spécifique dans la requête.

Si vous avez MySQL 5.1 où la liste de processus se trouve dans INFORMATION_SCHEMA, vous pouvez le faire pour générer les commandes KILL QUERY en bloc à partir du client mysql:

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

Vous pouvez faire des clauses WHERE sur le champ INFO pour rechercher une requête spécifique, le champ TIME sur les requêtes de longue durée ou le champ DB sur une base de données spécifique.

RolandoMySQLDBA
la source
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
la source
J'aime vraiment cette approche car elle peut être effectuée dans les limites du client mysql indépendamment de Linux ou Windows. +1 !!!
RolandoMySQLDBA