web-dev-qa-db-fra.com

Comment tuer les connexions MySQL

Je construis un site web avec MySQL. J'utilise TOAD pour MySQL et, tout à coup, je ne peux plus me connecter à la base de données car un message d'erreur s'affiche:

"Trop de connexions"

Existe-t-il un moyen dans Toad for MySQL de visualiser les connexions existantes pour pouvoir les supprimer ou de simplement fermer toutes les connexions ensemble?

40
leora

Non, il y a pas de commande MySQL intégrée pour cela. Il existe divers outils et scripts qui le prennent en charge. Vous pouvez supprimer certaines connexions manuellement ou redémarrer le serveur (mais cela sera plus lent).

Utilisation SHOW PROCESSLIST pour afficher toutes les connexions et KILL l'ID de processus que vous souhaitez supprimer.

Vous pouvez modifier le paramètre de délai d'attente pour que le démon MySQL supprime les processus inactifs lui-même ou augmente le nombre de connexions. Vous pouvez même limiter le nombre de connexions par nom d'utilisateur, de sorte que, si le processus continue à mal fonctionner, le seul processus affecté est le processus lui-même et qu'aucun autre client de votre base de données ne soit verrouillé.

Si vous ne pouvez plus vous connecter au serveur, sachez que MySQL réserve toujours une connexion supplémentaire à un utilisateur disposant du privilège SUPER. À moins que votre processus en infraction n'utilise pour une raison quelconque un nom d'utilisateur doté de ce privilège ...

Ensuite, lorsque vous pourrez à nouveau accéder à votre base de données, vous devrez corriger le processus (site Web) qui génère autant de connexions.

76
Konerak
mysql> SHOW PROCESSLIST;
+-----+------+-----------------+------+---------+------+-------+---------------+
| Id  | User | Host            | db   | Command | Time | State | Info      |
+-----+------+-----------------+------+---------+------+-------+----------------+
| 143 | root | localhost:61179 | cds  | Query   |    0 | init  | SHOW PROCESSLIST |
| 192 | root | localhost:53793 | cds  | Sleep   |    4 |       | NULL      |
+-----+------+-----------------+------+---------+------+-------+----------------+
2 rows in set (0.00 sec)

mysql> KILL 192;
Query OK, 0 rows affected (0.00 sec)

TILISATEUR 192:

mysql> SELECT * FROM exept;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> SELECT * FROM exept;
ERROR 2013 (HY000): Lost connection to MySQL server during query
31
zloctb

Je recommanderais de vérifier les connexions pour montrer que le nombre maximal de connexions par thread est

show variables like "max_connections";

échantillon

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 13  |
+-----------------+-------+
1 row in set

Puis augmentez-le par exemple

set global max_connections = 500;
6
zero8

Comme mentionné ci-dessus, il n'y a pas de commande spéciale pour le faire. Cependant, si toutes ces connexions sont inactives, utilisez "tables vides"; est capable de libérer toutes les connexions qui ne sont pas actives.

4
user1812597

Dans MySQL Workbench:

Navigateur de gauche> Gestion> Connexions client

Cela vous donne la possibilité de tuer les requêtes et les connexions.

Note: ce n'est pas TOAD comme l'OP l'a demandé, mais les utilisateurs de MySQL Workbench comme moi peuvent se retrouver ici

0
David Hudman