2011-02-18 14 views
11

Buen día para todos. Tengo un extraño error. He creado una charla que funciona así:php, mysql - Demasiadas conexiones al error de base de datos

  • preguntas/respuestas se insertan en una base de datos
  • cada 2 segundos una petición AJAX se envía a un script php que buscar a las nuevas preguntas/respuestas

funcionó bien hasta hoy cuando llegué a este error:

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 

el problema es que no estábamos que muchos ... (8) y no creo que el PP no podía soportar más de 8 a 16 conn ecciones simultáneas (en las especificaciones está escrito que el chat debe ser compatible con 50-100 usuarios, por lo que 8 es ... pequeño).

Entonces ... ¿alguien puede decirme por qué sucedió esto (ayer teníamos 15 y funcionó bien) y cómo resolverlo? Gracias por tu ayuda. Si necesita ejemplos de código, solo pregunte.

+0

Cuál es poner fuera de "mostrar variables como 'max_connections';" en el cliente mysql – Zimbabao

Respuesta

28

Hay un montón de diferentes razones para el error "demasiadas conexiones".

Consulte esta página de preguntas frecuentes en MySQL.com: http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

compruebe su fichero my.cnf para "max_connections". Si no existe ninguno intente:

[mysqld] 
set-variable=max_connections=250 

Sin embargo, el valor predeterminado es 151, por lo que debería estar bien.

Si está en un host compartido, es posible que otros usuarios estén utilizando demasiadas conexiones.

Otros problemas a tener en cuenta es el uso de conexiones persistentes y quedarse sin espacio de disco.

1

Compruebe si abre una nueva conexión con cada una de sus solicitudes (mysql_connect (...)). Si lo hace, asegúrese de cerrar la conexión después (usando mysql_close ($ link)).

Además, debe considerar cambiar este comportamiento, ya que mantener una conexión estable para cada usuario puede ser una mejor manera de llevar a cabo su tarea.

Si no lo hizo ya, echar un vistazo a este recurso de información obvia, sin embargo útil: http://php.net/manual/function.mysql-connect.php

11

El error SQLSTATE[HY000] [1040] Too many connections es un error SQL, y tiene que ver con el servidor SQL. Podría haber otras aplicaciones conectadas al servidor. El servidor tiene un número máximo de conexiones disponibles.

Si tiene phpmyadmin, puede usar la pestaña 'variables' para verificar cuál es la configuración.

También puede consultar el estado mesa de este modo:

show status like '%onn%'; 

O alguna variación en eso. comprobar the manual de qué variables hay

(tenga en cuenta, 'conexiones' no es las conexiones actuales, compruebe que enlazan :))

+0

comprobando. Miro en un minuto – zozo

+0

(se agregó otra forma de ver estos vars por cierto) – Nanne

4

Si usted está alcanzando el límite de conexiones mac ir a /etc/my.cnf y bajo la sección [mysqld] añadir max_connections = 500

y reinicie MySQL.

1

Esto puede suceder debido a demasiadas conexiones al mismo tiempo o muchas conversaciones al mismo tiempo. También puede suceder debido a demasiada sesión.

La mejor manera de solucionar este problema es reiniciar MySQL.

service mysqld restart 

o

service mysql restart 

o

/etc/init.d/mysqld restart 
Cuestiones relacionadas