L’erreur MySQL « Too many con­nec­tions » (ou « Trop de con­nexions ») se produit lorsque le nombre maximum de con­nexions si­mul­ta­nées au­to­ri­sé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 con­nexions non fermées cor­rec­te­ment ou une valeur max_connections trop faible sur le serveur.

Comment se produit l’erreur « Too many con­nec­tions » dans MySQL ou MariaDB ?

Une base de données ne peut traiter qu’un nombre limité de requêtes si­mul­ta­nées. Si cette limite maximale est dépassée, MySQL ou MariaDB affiche le message d’erreur « Too many con­nec­tions ». Cela se produit, par exemple, lorsqu’un script PHP tente d’établir trop de con­nexions si­mul­ta­nées avec la base de données re­la­tion­nelle. De même, dans le cas d’une ap­pli­ca­tion Web reposant sur MySQL, une forte affluence peut également provoquer l’erreur.

Stockage en ligne HiDrive Next
Vos données ac­ces­sibles partout et à tout moment
  • 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 con­nec­tions : voici comment corriger l’erreur

Il existe plusieurs façons de résoudre l’erreur « Too many con­nec­tions » dans MySQL, selon la cause exacte du problème. Les solutions les plus courantes sont dé­tail­lées ci-dessous.

Solution 1 : augmenter la limite de con­nexions MySQL/MariaDB

La variable système max_connections détermine le nombre de con­nexions que MySQL ou MariaDB peut accepter si­mul­ta­né­ment. Par défaut, cette valeur est fixée à 151 con­nexions, soit 150 con­nexions clas­siques plus une connexion réservée au compte SUPER. Ce privilège MySQL accorde des droits d’ad­mi­nis­tra­tion à l’uti­li­sa­teur.

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) dis­po­nible
  • La quantité de RAM utilisée par chaque connexion (les requêtes simples con­som­ment moins de mémoire que les opé­ra­tions complexes)
  • Le temps de réponse ac­cep­table pour le système

Selon la do­cu­men­ta­tion MySQL, la plupart des systèmes Linux peuvent gérer entre 500 et 1 000 con­nexions sans dif­fi­culté.

Ajus­te­ment permanent

Pour ajuster de manière per­ma­nente 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.cnf

Juste sous la première ligne, vous verrez l’entrée suivante :

[mysqld]

Ajoutez ensuite la ligne suivante :

max_connections=[nouvelle_valeur_maximale]

Ajus­te­ment tem­po­raire

Pour modifier tem­po­rai­re­ment le nombre de con­nexions maximales uni­que­ment pour la session en cours, vous pouvez exécuter la commande suivante dans la console MySQL :

SET GLOBAL max_connections = [nouvelle_valeur_maximale];

L’ajus­te­ment est valable jusqu’à ce que le serveur SQL soit redémarré.

Solution 2 : fermer les con­nexions non utilisées

Une autre cause fréquente de l’erreur « Too many con­nec­tions » est la non-fermeture correcte des con­nexions à la base de données. Chaque connexion ouverte occupe un em­pla­ce­ment dans MySQL ou MariaDB, et si ces con­nexions ne sont pas libérées, le serveur atteint ra­pi­de­ment 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’ins­truc­tion équi­va­lente connection.close(), et dans Node.js, la méthode connection.end().

Une autre approche éprouvée consiste à utiliser des pools de con­nexions. Ce système permet de gérer un nombre défini de con­nexions à la base de données et de les réu­ti­li­ser plutôt que d’en ouvrir de nouvelles à chaque requête. Cela réduit la charge du serveur et améliore les per­for­mances, car l’ouverture et la fermeture des con­nexions demandent du temps.

Solution 3 : ajuster le délai d’ex­pi­ra­tion des con­nexions

Une méthode efficace pour éviter l’erreur « Too many con­nec­tions » consiste à limiter la durée de vie maximale des con­nexions inactives. Par défaut, MySQL/MariaDB conserve les con­nexions inactives ouvertes pendant une période re­la­ti­ve­ment longue, même lorsqu’elles n’exécutent plus de requêtes. Chacune de ces con­nexions continue pourtant d’occuper un em­pla­ce­ment.

Les variables système wait_timeout et interactive_timeout dé­ter­mi­nent la durée pendant laquelle les con­nexions inactives restent ouvertes avant d’être au­to­ma­ti­que­ment fermées par le serveur. wait_timeout s’applique aux con­nexions normales, tandis que interactive_timeout concerne les con­nexions in­te­rac­tives, comme celles de la console MySQL. En réduisant ces valeurs, vous pouvez libérer plus ra­pi­de­ment les con­nexions « sus­pen­dues ».

Ajus­te­ment permanent

L’ajus­te­ment peut être appliqué de manière per­ma­nente dans le fichier de con­fi­gu­ra­tion my.cnf ou my.ini. Pour ce faire, ouvrez ce fichier et re­cher­chez l’entrée suivante :

[mysqld]

Ajoutez les lignes suivantes :

wait_timeout=120
interactive_timeout=120

Cela garantit que les con­nexions inactives ne mo­no­po­li­sent pas inu­ti­le­ment les res­sources pendant une période prolongée.

Ajus­te­ment tem­po­raire

Cet ajus­te­ment peut également être appliqué tem­po­rai­re­ment depuis la console MySQL. Dans ce cas, la mo­di­fi­ca­tion ne concerne que la session en cours et les valeurs sont réi­ni­tia­li­sées après le re­dé­mar­rage du serveur SQL.

SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
Aller au menu principal