web-dev-qa-db-fra.com

Mettre fin aux connexions mysql inactives

Je vois que beaucoup de connexions sont ouvertes et restent inactives pendant longtemps, disons 5 minutes.

Existe-t-il une solution pour terminer/fermer le serveur sans redémarrer le service mysql?

Je conserve un ancien système PHP et je ne peux pas fermer les connexions établies pour exécuter la requête.

Dois-je réduire les valeurs de délai d'expiration dans mon fichier.cnf ces valeurs par défaut à 8 heures?

# default 28800 seconds

interactive_timeout=60
wait_timeout=60
38
shantanuo

Nettoyage manuel:

Vous pouvez tuer le processid.

mysql> show full processlist;
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| Id      | User       | Host              | db   | Command | Time  | State | Info                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| 1193777 | TestUser12 | 192.168.1.11:3775 | www  | Sleep   | 25946 |       | NULL                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+

mysql> kill 1193777;

Mais:

  • l'application php peut signaler des erreurs (ou le serveur Web, consultez les journaux d'erreurs)
  • ne corrige pas ce qui n'est pas cassé - si vous n'êtes pas à court de connexions, laissez-les.

Service de nettoyage automatique;)

Ou vous configurez votre serveur mysql en définissant un délai plus court sur wait_timeout et interactive_timeout

mysql> show variables like "%timeout%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)

Fixé avec:

set global wait_timeout=3;
set global interactive_timeout=3;

(et également défini dans votre fichier de configuration, pour le redémarrage de votre serveur)

Mais vous traitez les symptômes plutôt que la cause sous-jacente - pourquoi les connexions sont-elles ouvertes? Si le script PHP terminé, ne devrait-il pas se fermer? Assurez-vous que votre serveur Web n'utilise pas le pool de connexions ...

57
Konerak

Je ne vois aucun problème, sauf si vous ne les gérez pas à l'aide d'un pool de connexions.

Si vous utilisez un pool de connexions, ces connexions sont réutilisées au lieu d'initier de nouvelles connexions. Donc, fondamentalement, laisser des connexions ouvertes et les réutiliser est moins problématique que de les recréer à chaque fois.

3
guykaplan