Cómo arreglar el error de MySQL: Too Many Connections

Introducción al error de MySQL : Too Many Connections

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 el error de MySQL: Too Many Connections?

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 😉


6 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   nex dijo

    Buen post, el MySql…utilizan bastante en FreeBSD,….KZKG^Gaara?,…seria bueno que hagas un post, de como instalar y configurar MySql en FreeBSD como: SSH (secure – shell), SSH (via Web), SFTP (SSH-File Transfer Protocol), Apache – PHP- MySql, PHP5 y Extensiones PhpSysInfo.

    1.    KZKG^Gaara dijo

      Para ello tendría que instalar FreeBSD, no creo que disponga del tiempo ahora mismo, recién cambié de trabajo y tengo muchas responsabilidades nuevas 🙁

  2.   Saul dijo

    Recientemente me toco hacer algo similar para un proyectos con nodejs. En mi caso incremente a 250 y con eso me fue suficiente, por ahora me anda bien. Gracias por el dato

  3.   Francisco dijo

    Hola, me podrias ayudar a como entrar a como entrar a /etc/mysql/my.cfg?

    Tengo un VPS, pero no logro poder entrar con PUTTY.

    Saludos.

  4.   carnaza dijo

    Para solucionar el problema de la 1.- Opción comentada, y conserve los cambios al reiniciar el servidor, se debe editar el fichero según versión:

    //////////////////////////////////////////////////////////////////////
    // Cambio el directorio en Ubuntu 16.04 //////////////////////
    //////////////////////////////////////////////////////////////////////
    vi /etc/mysql/mysql.conf.d/mysqld.cnf

    //////////////////////////////////////////////////////////////////////
    // Cambio el directorio en Ubuntu 15.04 //////////////////////
    //////////////////////////////////////////////////////////////////////
    vi /etc/mysql/mariadb.conf.d/mysqld.cnf

    //////////////////////////////////////////////////////////////////////
    // Cambio el directorio en Ubuntu old //////////////////////
    //////////////////////////////////////////////////////////////////////

    vi /etc/mysql/my.cnf

    //////////////////////////////////////////////////////////////////////
    // agregar esta linea debajo de la etiqueta [mysqld] o [mysql] //
    // Luego reiniciar el server //
    //////////////////////////////////////////////////////////////////////
    max_connections = 500

  5.   indignado dijo

    Tutorial de cero en ningun momento te dice como cambiarlo