El error de MySQL “Too many co­n­ne­c­tio­ns” (o “De­ma­sia­das co­ne­xio­nes”) aparece cuando se supera el número máximo permitido de co­ne­xio­nes si­mu­l­tá­neas al servidor. Cada cliente activo consume una conexión y, cuando se alcanza el límite, no se pueden abrir nuevas. Las causas más comunes incluyen muchas consultas paralelas en ejecución, co­ne­xio­nes que no se cierran co­rre­c­ta­me­n­te o un valor max_connections co­n­fi­gu­ra­do demasiado bajo en el servidor.

¿Cómo se produce el error “Too many co­n­ne­c­tio­ns” en MySQL/MariaDB?

Una base de datos solo puede procesar un número limitado de pe­ti­cio­nes al mismo tiempo. Si se supera este valor máximo, MySQL o MariaDB mostrarán el mensaje de error “Too many co­n­ne­c­tio­ns”. Esto puede ocurrir, por ejemplo, cuando un script de PHP intenta abrir de­ma­sia­das co­ne­xio­nes si­mu­l­tá­neas con la base de datos re­la­cio­nal. Del mismo modo, una apli­ca­ción web con alta demanda de tráfico puede generar el error “Too many co­n­ne­c­tio­ns” si el servidor no está op­ti­mi­za­do para manejas tanas co­ne­xio­nes activas.

HiDrive
Almacena y comparte tus datos
  • Almacena, comparte y edita archivos fá­ci­l­me­n­te
  • Centros de datos europeos con ce­r­ti­fi­ca­ción ISO
  • Alta seguridad de los datos, conforme con el RGPD

“Too many co­n­ne­c­tio­ns”: así puedes so­lu­cio­nar el error en MySQL o MariaDB

Existen di­fe­re­n­tes formas de so­lu­cio­nar el error “Too many co­n­ne­c­tio­ns” en MySQL, de­pe­n­die­n­do de dónde se origine el problema. A co­n­ti­nua­ción, se explican de­ta­lla­da­me­n­te las so­lu­cio­nes más comunes y cómo apli­car­las paso a paso.

Solución 1: ajustar el nuevo número máximo de co­ne­xio­nes

La variable del sistema max_connections define cuántas co­ne­xio­nes si­mu­l­tá­neas acepta MySQL o MariaDB. Por defecto, este valor es 151, lo que permite 150 co­ne­xio­nes normales más una conexión reservada para una cuenta con pri­vi­le­gios SUPER. Este pri­vi­le­gio otorga derechos de ad­mi­ni­s­tra­ción avanzados al usuario.

Antes de modificar max_connections, debes decidir qué nuevo límite deseas es­ta­ble­cer. Au­me­n­tar­lo puede ser útil, pero también implica un mayor consumo de recursos. Ten en cuenta los si­guie­n­tes factores:

  • La cantidad de memoria RAM di­s­po­ni­ble
  • La RAM que requiere cada conexión (las consultas simples consumen menos memoria que las complejas)
  • El tiempo de respuesta que co­n­si­de­ras aceptable

Según la do­cu­me­n­ta­ción de MySQL, la mayoría de los sistemas Linux pueden manejar entre 500 y 1000 co­ne­xio­nes si­mu­l­tá­neas sin in­co­n­ve­nie­n­tes, siempre que el hardware esté co­rre­c­ta­me­n­te di­me­n­sio­na­do.

Ajuste pe­r­ma­ne­n­te de max_connections

Para ajustar pe­r­ma­ne­n­te­me­n­te la variable max_connections, debes ac­tua­li­zar el archivo my.cnf o el archivo my.ini.

Abre el archivo /etc/my.cnf para editarlo con el siguiente comando:

sudo nano /etc/my.cnf

Justo debajo de la primera línea aparece la siguiente entrada:

[mysqld]

Agrega una nueva entrada:

max_connections=[desired new maximum number]

Ajuste temporal de max_connections

Para cambiar te­m­po­ra­l­me­n­te el número máximo de co­ne­xio­nes solo durante la sesión actual, ejecuta el siguiente comando en la consola de MySQL:

SET GLOBAL max_connections = [desired new maximum number];

El ajuste es válido hasta que el servidor SQL se reinicie.

Solución 2: cerrar co­ne­xio­nes no uti­li­za­das

Una causa frecuente del error “Too many co­n­ne­c­tio­ns” es que las apli­ca­cio­nes no cierran co­rre­c­ta­me­n­te las co­ne­xio­nes a la base de datos. Cada conexión abierta ocupa un espacio en MySQL o MariaDB, y si no se libera, el servidor puede alcanzar rá­pi­da­me­n­te el número máximo permitido.

En PHP, debes llamar siempre a mysqli_close($connection) después de usar una conexión y ejecutar las consultas. En Python, utiliza el equi­va­le­n­te connection.close(). Y en Node.js, se re­co­mie­n­do emplear connection.end().

Otro enfoque eficaz es im­ple­me­n­tar pools de co­ne­xio­nes. Este método gestiona y reutiliza un número fijo de co­ne­xio­nes de forma ce­n­tra­li­za­da, en lugar de abrir una nueva para cada solicitud. De este modo, se reduce la carga del servidor y se mejora el re­n­di­mie­n­to general, ya que crear y cerrar co­ne­xio­nes consume recursos y tiempo.

Solución 3: ajustar el tiempo de espera de las co­ne­xio­nes

Otra manera de evitar el error “Too many co­n­ne­c­tio­ns” es limitar la duración máxima de las co­ne­xio­nes inactivas. Por defecto, MySQL y MariaDB mantienen abiertas las co­ne­xio­nes inactivas durante un tiempo re­la­ti­va­me­n­te largo, incluso cuando ya no ejecutan consultas. Sin embargo, cada una de ellas sigue ocupando un espacio en el sistema.

Las variables del sistema wait_timeout y interactive_timeout de­te­r­mi­nan cuánto tiempo pe­r­ma­ne­cen activas las co­ne­xio­nes inactivas antes de que el servidor las cierre au­to­má­ti­ca­me­n­te. wait_timeout se aplica a las co­ne­xio­nes normales, mientras que interactive_timeout se usa para co­ne­xio­nes de clientes in­ter­ac­ti­vos, como la consola MySQL. Reducir estos valores permite liberar antes las co­ne­xio­nes inactivas.

Ajuste pe­r­ma­ne­n­te

El ajuste se puede realizar de forma pe­r­ma­ne­n­te en el archivo de co­n­fi­gu­ra­ción my.cnf o my.ini. Para ello, ábrelo y busca la siguiente entrada:

[mysqld]

A co­n­ti­nua­ción, añade las si­guie­n­tes líneas:

wait_timeout=120
interactive_timeout=120

Así te aseguras de que las co­ne­xio­nes inactivas no bloqueen in­ne­ce­sa­ria­me­n­te los recursos.

Ajuste temporal

Este ajuste también puede rea­li­zar­se de forma temporal desde la consola de MySQL. En ese caso, el cambio solo se aplica a la sesión actual y los valores se re­s­ta­ble­cen al reiniciar el servidor SQL.

SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
Ir al menú principal