2011-02-08 16 views
19

Estoy construyendo un sitio web con MySQL. Estoy usando SAPO para MySQL y de repente no me puedo conectar a la base de datos como que estoy recibiendo un error:Cómo matar las conexiones de MySQL

"Too many connections"

¿Hay alguna forma de sapo para MySQL para ver las conexiones existentes para poder matarlos o simplemente cerrar todas las conexiones todas juntas?

+1

Si se está quedando sin conexiones, probablemente esté haciendo algo mal en su sitio web, como por ejemplo no cerrar sus conexiones correctamente. – jishi

Respuesta

51

No, no hay sin comando MySQL incorporado para eso. Hay varias herramientas y scripts que lo admiten, puede eliminar algunas conexiones manualmente o reiniciar el servidor (pero eso será más lento).

Utilice SHOW PROCESSLIST para ver todas las conexiones y KILL las ID del proceso que desea eliminar.

Puede editar la configuración de tiempo de espera para que el daemon de MySQL elimine los procesos inactivos o aumentar el recuento de conexiones. Incluso puede limitar la cantidad de conexiones por nombre de usuario, de modo que si el proceso se sigue comportando mal, el único proceso afectado es el proceso en sí mismo y ningún otro cliente en su base de datos queda bloqueado.

Si no puede conectarse más con el servidor, debe saber que MySQL siempre reserva 1 conexión adicional para un usuario con el privilegio SUPER. A menos que su proceso ofensivo sea por alguna razón usando un nombre de usuario con ese privilegio ...

Luego, después de que pueda acceder nuevamente a su base de datos, debe arreglar el proceso (sitio web) que está generando tantas conexiones.

+1

Nota: el límite por nombre de usuario se introdujo en 5.0.3, por lo que si está ejecutando 4.1 o algo así, no tiene suerte. – jishi

4

Como se mencionó anteriormente, no hay un comando especial para hacerlo. Sin embargo, si todas esas conexiones están inactivas, use 'tablas de nivelación'; puede liberar todas esas conexiones que no están activas.

16
mysql> SHOW PROCESSLIST; 
+-----+------+-----------------+------+---------+------+-------+---------------+ 
| Id | User | Host   | db | Command | Time | State | Info  | 
+-----+------+-----------------+------+---------+------+-------+----------------+ 
| 143 | root | localhost:61179 | cds | Query | 0 | init | SHOW PROCESSLIST | 
| 192 | root | localhost:53793 | cds | Sleep | 4 |  | NULL  | 
+-----+------+-----------------+------+---------+------+-------+----------------+ 
2 rows in set (0.00 sec) 

mysql> KILL 192; 
Query OK, 0 rows affected (0.00 sec) 

USUARIO 192:

mysql> SELECT * FROM exept; 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec) 

mysql> SELECT * FROM exept; 
ERROR 2013 (HY000): Lost connection to MySQL server during query 
2

Recomendaría comprobar las conexiones para mostrar la conexión de rosca máxima es

show variables like "max_connections"; 

muestra

+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| max_connections | 13 | 
+-----------------+-------+ 
1 row in set 

Luego increméntelo con el ejemplo

set global max_connections = 500; 
+0

Genial, muchas gracias, –

+0

Edite el archivo: /etc/mysql/mysql.conf.d/mysqld.cnf Instalación de Mysql predeterminada: 151 y Valor máximo: 100.000 Consulte: https://dev.mysql.com/doc/ refman/5.7/es/server-system-variables.html # sysvar_max_connections – Tarik

Cuestiones relacionadas