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.
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.
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/