L'erreur "MySQL server has gone away" survient quand la connexion entre votre application et MySQL est coupée. Cela peut arriver pour plusieurs raisons, toutes avec des solutions différentes.
Symptômes
- Erreur "MySQL server has gone away"
- Erreurs sporadiques sur certaines requêtes
- Timeout sur les longues opérations
- Connexions qui fonctionnent puis échouent
Causes Fréquentes
- wait_timeout dépassé : MySQL ferme les connexions inactives après wait_timeout secondes.
- max_allowed_packet trop petit : Une requête trop volumineuse dépasse la limite autorisée.
- MySQL a redémarré : Un redémarrage MySQL coupe toutes les connexions existantes.
Étapes de Diagnostic
- Vérifiez si MySQL tourne (systemctl status mysql)
- Examinez les logs MySQL (/var/log/mysql/error.log)
- Vérifiez wait_timeout et max_allowed_packet
- Testez avec une requête simple pour isoler le problème
Automatiser avec MoniTao
MoniTao aide à détecter ces problèmes :
- Surveillance des endpoints qui utilisent la BDD
- Détection des erreurs 500 liées aux connexions
- Historique pour identifier les patterns
Bonnes Pratiques
- Utilisez des connexions persistantes avec reconnect automatique
- Augmentez max_allowed_packet si nécessaire
- Implémentez un health check sur la BDD
- Utilisez un connection pool avec validation
Questions Fréquentes
Quelle valeur pour wait_timeout ?
Par défaut 28800s (8h). Réduisez à 300s si vous avez beaucoup de connexions.
Comment activer la reconnexion automatique ?
En PHP avec PDO, utilisez ATTR_PERSISTENT ou interceptez l'erreur pour reconnecter.
max_allowed_packet, quelle valeur ?
Minimum 16M pour les applications standards. 64M ou plus si vous stockez des blobs.
Comment MoniTao aide ?
En surveillant les endpoints, vous détectez quand la BDD a des problèmes.
Prêt à dormir sur vos deux oreilles ?
Commencez gratuitement, sans carte bancaire.