Comment corriger l’erreur « Too many connections » dans MySQL ou MariaDB ?
L’erreur MySQL « Too many connections » (ou « Trop de connexions ») se produit lorsque le nombre maximum de connexions simultanées autorisées au serveur est dépassé. Chaque client actif occupe une connexion, et une fois la limite atteinte, aucune nouvelle connexion ne peut être ouverte. Les causes les plus fréquentes sont un trop grand nombre de requêtes exécutées en parallèle, des connexions non fermées correctement ou une valeur max_connections trop faible sur le serveur.
Comment se produit l’erreur « Too many connections » dans MySQL ou MariaDB ?
Une base de données ne peut traiter qu’un nombre limité de requêtes simultanées. Si cette limite maximale est dépassée, MySQL ou MariaDB affiche le message d’erreur « Too many connections ». Cela se produit, par exemple, lorsqu’un script PHP tente d’établir trop de connexions simultanées avec la base de données relationnelle. De même, dans le cas d’une application Web reposant sur MySQL, une forte affluence peut également provoquer l’erreur.
- Modifiez, partagez et stockez vos fichiers
- Data centers européens certifiés ISO
- Sécurité élevée des données, conforme au RGPD
Too many connections : voici comment corriger l’erreur
Il existe plusieurs façons de résoudre l’erreur « Too many connections » dans MySQL, selon la cause exacte du problème. Les solutions les plus courantes sont détaillées ci-dessous.
Solution 1 : augmenter la limite de connexions MySQL/MariaDB
La variable système max_connections détermine le nombre de connexions que MySQL ou MariaDB peut accepter simultanément. Par défaut, cette valeur est fixée à 151 connexions, soit 150 connexions classiques plus une connexion réservée au compte SUPER. Ce privilège MySQL accorde des droits d’administration à l’utilisateur.
Commencez par définir la nouvelle valeur maximale que vous souhaitez attribuer à max_connections. Plusieurs facteurs doivent être pris en compte avant d’augmenter cette limite :
- La quantité de mémoire vive (RAM) disponible
- La quantité de RAM utilisée par chaque connexion (les requêtes simples consomment moins de mémoire que les opérations complexes)
- Le temps de réponse acceptable pour le système
Selon la documentation MySQL, la plupart des systèmes Linux peuvent gérer entre 500 et 1 000 connexions sans difficulté.
Ajustement permanent
Pour ajuster de manière permanente la variable max_connections, vous devez mettre à jour le fichier my.cnf ou my.ini.
Ouvrez le fichier /etc/my.cnf pour le modifier à l’aide de la commande suivante :
sudo nano /etc/my.cnfJuste sous la première ligne, vous verrez l’entrée suivante :
[mysqld]Ajoutez ensuite la ligne suivante :
max_connections=[nouvelle_valeur_maximale]Ajustement temporaire
Pour modifier temporairement le nombre de connexions maximales uniquement pour la session en cours, vous pouvez exécuter la commande suivante dans la console MySQL :
SET GLOBAL max_connections = [nouvelle_valeur_maximale];L’ajustement est valable jusqu’à ce que le serveur SQL soit redémarré.
Solution 2 : fermer les connexions non utilisées
Une autre cause fréquente de l’erreur « Too many connections » est la non-fermeture correcte des connexions à la base de données. Chaque connexion ouverte occupe un emplacement dans MySQL ou MariaDB, et si ces connexions ne sont pas libérées, le serveur atteint rapidement la limite autorisée.
En PHP, il est donc essentiel d’appeler mysqli_close($connection) une fois les requêtes terminées. En Python, utilisez l’instruction équivalente connection.close(), et dans Node.js, la méthode connection.end().
Une autre approche éprouvée consiste à utiliser des pools de connexions. Ce système permet de gérer un nombre défini de connexions à la base de données et de les réutiliser plutôt que d’en ouvrir de nouvelles à chaque requête. Cela réduit la charge du serveur et améliore les performances, car l’ouverture et la fermeture des connexions demandent du temps.
Solution 3 : ajuster le délai d’expiration des connexions
Une méthode efficace pour éviter l’erreur « Too many connections » consiste à limiter la durée de vie maximale des connexions inactives. Par défaut, MySQL/MariaDB conserve les connexions inactives ouvertes pendant une période relativement longue, même lorsqu’elles n’exécutent plus de requêtes. Chacune de ces connexions continue pourtant d’occuper un emplacement.
Les variables système wait_timeout et interactive_timeout déterminent la durée pendant laquelle les connexions inactives restent ouvertes avant d’être automatiquement fermées par le serveur. wait_timeout s’applique aux connexions normales, tandis que interactive_timeout concerne les connexions interactives, comme celles de la console MySQL. En réduisant ces valeurs, vous pouvez libérer plus rapidement les connexions « suspendues ».
Ajustement permanent
L’ajustement peut être appliqué de manière permanente dans le fichier de configuration my.cnf ou my.ini. Pour ce faire, ouvrez ce fichier et recherchez l’entrée suivante :
[mysqld]Ajoutez les lignes suivantes :
wait_timeout=120
interactive_timeout=120Cela garantit que les connexions inactives ne monopolisent pas inutilement les ressources pendant une période prolongée.
Ajustement temporaire
Cet ajustement peut également être appliqué temporairement depuis la console MySQL. Dans ce cas, la modification ne concerne que la session en cours et les valeurs sont réinitialisées après le redémarrage du serveur SQL.
SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
