web-dev-qa-db-fra.com

tuer toutes les requêtes - MySQL

Parfois, pendant un SNAFU je dois exécuter kill query xxxxxxx vingt ou trente fois. Toute sorte de kill all commande qui me manque?

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

17
JIStone

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.

15
RolandoMySQLDBA
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/

5
philfreo