U3Games

Comunidad Online => Taberna => Mensaje iniciado por: Swarlog en Jul 29, 2022, 12:07 AM

Título: Reparar - Too many connections (MYSQL)
Publicado por: Swarlog en Jul 29, 2022, 12:07 AM
Cuando se tiene una aplicación web (sitio, blog, foro, etc) que tiene alta demanda, o sea, que gran número de usuarios visita esto se traduce en incremento de consumo en el servidor. Si dicha app web usa una base de datos MySQL y las consultas son realmente muchas (por mala programación de la web o por muchos usuarios usando la web), existe la posibilidad de que MySQL muestre este error:

mysqli_connect(): (HY000/1040): Too many connections
¿Qué significa específicamente esto?

Significa que al MySQL están llegando demasiadas peticiones, más de las que puede aceptar, más de las que puede poner en cola o en espera.

¿cómo solucionarlo?

Simple, debemos aumentar el límite máximo de peticiones (conexiones) que MySQL admite.

Les daré dos opciones para solucionar este problema:

1. Editamos el archivo /etc/mysql/my.cfg :

nano /etc/mysql/my.cfg
En él ponemos lo siguiente bajo donde dice [mysql]:

max_connections = 500
max_user_connections = 500

Esto aumentará el número máximo de conexiones de 100 (que es el por defecto) a 500.

Guardamos y salimos, entonces reiniciamos el servicio MySQL y listo. Este cambio es permanente.

2. Otra forma de resolver este problema es cambiando el límite máximo igual, pero mediante una consulta MySQL.

Primero vamos a mostrar el límite actual:

mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";'
Esto nos mostrará algo como esto:

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

O sea, que el límite actual son 151 conexiones, bien, vamos a subirlo a 500 por medio de una consulta:

mysql --user="root" --password="PASSWORD" --execute='SET GLOBAL max_connections = 500;'
Listo!

El problema de esta forma, es que cuando se reinicie el servicio, se pierde esta configuración.

Para suplir este detalle se puede hacer un script bash que cada X tiempo verifique, o inclusive agregar la línea al bloque de start o restart del daemon 😉

¿Pero entonces para qué quiero conocer esta 2da opción? ... bueno, eso mismo decía yo. Pero hace un mes un Ubuntu Server hacía caso omiso al método No.1, por lo que... en casos extremos de OS majaderos, tenemos esta 2da opción que funciona igual de bien.