web-dev-qa-db-fra.com

php, mysql - Trop de connexions à une erreur de base de données

Bonne journée à tous. J'ai une erreur étrange. J'ai créé un chat qui fonctionne comme ceci: 

  • les questions/réponses sont insérées dans une base de données
  • toutes les 2 secondes, une requête ajax est envoyée à un script php qui récupère les nouvelles questions/réponses

Cela a bien fonctionné jusqu'à aujourd'hui quand j'ai eu cette erreur:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1040] Too many connections' in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php:129 
Stack trace: #0 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(129): PDO->__construct('mysql:Host=loca...', '', '', Array) 
s#1 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect() 
s#2 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(448): Zend_Db_Adapter_Pdo_Mysql->_connect() 
s#3 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('select profile_...', Array) 
s#4 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(782): Zend_Db_Adapter_Pdo_Abstract->query('select profile_...', Array) 
s#5 /var/www/html/dbdev/include/Profile.php(43): Zend_Db_Adapter_Abstract->fetchPairs('select profile_...') 
s#6 /var/www/html/dbdev/public_html/index.php(29): Profile->load() 
s#7 {main} Next exception 'Zend_Db_Adapter_Exception' with in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php on line 144

Le problème est que nous n'étions pas si nombreux ... (8) et je ne pense pas que la base de données ne puisse supporter plus de 8 à 16 connexions simultanément (les spécifications spécifient que le chat doit prendre en charge 50 à 100 utilisateurs; ... petit). 

Alors ... tout le monde peut-il me dire pourquoi cela s’est produit (hier, nous avions 15 ans et nous avons bien fonctionné) et comment le résoudre? Merci de votre aide. Si vous avez besoin d'échantillons de code, n'hésitez pas. 

13
zozo

Il y a un tas de raisons différentes pour l'erreur "Too Many Connections".

Consultez cette page FAQ sur MySQL.com: http://dev.mysql.com/doc/refman/5.5/fr/too-many-connections.html

Vérifiez votre fichier my.cnf pour "max_connections". S'il n'y en a pas, essayez:

[mysqld]
set-variable=max_connections=250

Cependant, la valeur par défaut est 151, vous devriez donc aller bien.

Si vous êtes sur un hôte partagé, il se peut que d'autres utilisateurs prennent trop de connexions.

L'utilisation de connexions persistantes et le manque d'espace disque constituent d'autres problèmes à surveiller.

32
Alexandru Petrescu

L'erreur SQLSTATE[HY000] [1040] Too many connections est une erreur SQL liée au serveur SQL. Il pourrait y avoir d'autres applications se connectant au serveur. Le serveur a un nombre maximal de connexions disponibles.

Si vous avez phpmyadmin, vous pouvez utiliser l'onglet "variables" pour vérifier quel est le paramètre.

Vous pouvez également interroger la table status de la manière suivante:

show status like '%onn%';

Ou un écart à ce sujet. vérifier le manuel pour quelles variables il y a

(sachez que 'connexions' n'est pas les connexions actuelles, vérifiez ce lien :))

12
Nanne

Si vous atteignez la limite de connexion mac , Accédez à /etc/my.cnf et dans la section [mysqld], ajoutez max_connections = 500

et redémarrez MySQL.

4
Zimbabao

Veuillez vérifier si vous ouvrez une nouvelle connexion avec chacune de vos demandes (mysql_connect (...)). Si vous le faites, assurez-vous de fermer la connexion par la suite (en utilisant mysql_close ($ link)).

En outre, vous devriez envisager de modifier ce comportement, car le fait de conserver une connexion stable pour chaque utilisateur peut constituer un meilleur moyen d'accomplir votre tâche.

Si vous ne l'avez pas déjà fait, jetez un coup d'œil à cette source d'informations évidente mais néanmoins utile: http://php.net/manual/function.mysql-connect.php

1
codenapper

Cela peut se produire en raison d'un nombre trop élevé de connexions en même temps ou de discussions en même temps. En outre, cela peut arriver à cause d'un trop grand nombre de sessions. 

Le meilleur moyen de résoudre ce problème est de redémarrer MySQL. 

service mysqld restart

ou

service mysql restart

ou

 /etc/init.d/mysqld restart
1
Laduram Vishnoi

Si vous devez augmenter le nombre de connexions MySQL sans redémarrer MySQL, procédez comme ci-dessous, également si vous ne connaissez pas le fichier de configuration, utilisez ci-dessous mysqlworkbench ou phpmyadmin ou la commande Invite pour s'exécuter sous les requêtes.

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL max_connections = 250;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 250   |
+-----------------+-------+
1 row in set (0.00 sec)

Ces paramètres changeront lors du redémarrage de MySQL.


Pour les modifications permanentes, ajoutez la ligne ci-dessous dans my.cnf et redémarrez MySQL.

max_connections = 151
0
ManiMaran A