110 votes

Comment puis-je tuer tous les processus dans Mysql "show processlist"?

Parce que je vois beaucoup de processus là-bas et que la colonne "heure" indique de grandes valeurs pour chacun d'entre eux.

196voto

Angelin Nadar Points 2289

Les opérations de massacre permettent de gagner du temps. Faites-le dans MySql lui-même:

Exécuter ces commandes

 mysql> select concat('KILL ',id,';') from information_schema.processlist
where user='root' and time > 200 into outfile '/tmp/a.txt';

mysql> source /tmp/a.txt;
 

Référence

 ---------edit------------
 

si vous ne voulez pas stocker dans un fichier, stockez-le dans un variable

Il suffit de lancer dans votre invite de commande

 > out1=$(mysql -B test -uroot -proot --disable-column-names  -e "select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200;")

> out2= $(mysql -B test -uroot -proot --disable-column-names  -e "$out1")
 

100voto

Michal Čihař Points 3981

Vous devez les tuer un par un, MySQL n’a pas de commande de destruction massive. Vous pouvez l'écrire dans n'importe quelle langue, par exemple en PHP, vous pouvez utiliser quelque chose comme:

 $result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
  $process_id=$row["Id"];
  if ($row["Time"] > 200 ) {
    $sql="KILL $process_id";
    mysql_query($sql);
  }
}
 

16voto

m8t Points 129

J'ai aussi cherché comment analyser par MySQL, la commande SHOW PROCESSLIST et s'est terminée avec un one-liner dans un Shell:

mysqladmin processlist -u <USERNAME> -p<PASSWORD> | \
awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | \
mysql -u <USERNAME> -p<PASSWORD>
  • la commande mysqladmin processlist va imprimer une table avec l'id de thread;
  • awk analyse de la deuxième colonne, seul le nombre (id de thread) et de générer de MySQL TUER des commandes;
  • et enfin le dernier appel à mysql va exécuter le passé des commandes.

Vous pouvez exécuter la commande grep avant la awk commande filtrer en fonction d'une base de données de nom.

5voto

mikesl Points 983

Si vous n'avez pas information_schema:

mysql -e "show full processlist" | cut -f1 | sed -e 's/^/kill /' | sed -e 's/$/;/' ; > /tmp/kill.txt mysql> . /tmp/kill.txt

4voto

Suresh Kamrushi Points 4371

Connectez-vous à Mysql en tant qu'administrateur:

  mysql -uroot -ppassword;
 

Et que exécuter la commande:

 mysql> show processlist;
 

Vous obtiendrez quelque chose comme ci-dessous:

 +----+-------------+--------------------+----------+---------+------+-------+------------------+
| Id | User        | Host               | db       | Command | Time | State | Info             |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
| 49 | application | 192.168.44.1:51718 | XXXXXXXX | Sleep   |  183 |       | NULL             ||
| 55 | application | 192.168.44.1:51769 | XXXXXXXX | Sleep   |  148 |       | NULL             |
| 56 | application | 192.168.44.1:51770 | XXXXXXXX | Sleep   |  148 |       | NULL             |
| 57 | application | 192.168.44.1:51771 | XXXXXXXX | Sleep   |  148 |       | NULL             |
| 58 | application | 192.168.44.1:51968 | XXXXXXXX | Sleep   |   11 |       | NULL             |
| 59 | root        | localhost          | NULL     | Query   |    0 | NULL  | show processlist |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
 

Vous verrez les détails complets des différentes connexions. Maintenant, vous pouvez tuer la connexion en sommeil comme ci-dessous:

 mysql> kill 52;
Query OK, 0 rows affected (0.00 sec)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: