Maison > base de données > tutoriel mysql > le corps du texte

Puis-je mettre fin aux connexions MySQL dormantes sans redémarrer le service ?

DDD
Libérer: 2024-11-10 04:57:03
original
320 Les gens l'ont consulté

Can I terminate dormant MySQL connections without restarting the service?

Mise à fin des connexions MySQL dormantes

D'innombrables connexions restent inactives pendant des périodes prolongées, jusqu'à 5 minutes, créant une préoccupation importante. Est-il possible de mettre fin ou de fermer ces connexions sans recourir au redémarrage du service MySQL ? Malgré le maintien d'un ancien système PHP qui empêche la fermeture des connexions pendant l'exécution d'une requête, les valeurs de délai d'attente dans le fichier my.cnf doivent-elles être réduites par rapport aux 8 heures par défaut ?

Nettoyage manuel

Les ID de processus peuvent être utilisés pour mettre fin manuellement aux connexions à l'aide de la commande KILL :

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;
Copier après la connexion

Cependant, cette approche présente des inconvénients potentiels :

  • Les applications PHP peuvent rencontrer des erreurs.
  • Si les ressources de connexion ne sont pas rares, il est préférable de les laisser tranquilles.

Nettoyage automatisé

Une solution alternative consiste à configurer le serveur MySQL avec des délais d'attente plus courts pour 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)
Copier après la connexion

Ces délais d'attente peuvent être définis à l'aide des commandes suivantes :

set global wait_timeout=3;
set global interactive_timeout=3;
Copier après la connexion

Il est important de se rappeler que ces modifications ne concernent que les symptômes et non la cause sous-jacente de connexions persistantes. Les scripts PHP doivent être correctement configurés pour fermer les connexions une fois terminés, et le regroupement de connexions par le serveur Web doit être désactivé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal