Cómo solucionar el error 'Too many connections' en MySQL: Guía práctica
¿Qué significa el error "Too many connections" en MySQL?
Imagina que tu base de datos es un restaurante con un número limitado de mesas. Cuando llegan más clientes de los que puedes acomodar, tienes que rechazar a los que esperan fuera. Eso es exactamente lo que ocurre con el error "Too many connections": tu servidor MySQL ha alcanzado el límite máximo de conexiones simultáneas permitidas y rechaza nuevas peticiones.
Este error es uno de los más comunes en entornos de hosting, especialmente cuando una web crece en tráfico o cuando alguna aplicación no cierra correctamente sus conexiones. La buena noticia es que, en la mayoría de los casos, tiene solución y puedes aplicarla tú mismo sin necesidad de ser un experto en administración de servidores.
En esta guía práctica, te explicaré paso a paso cómo diagnosticar, solucionar y prevenir este problema. Vamos a ello.
¿Por qué aparece el error "Too many connections"?
Antes de lanzarnos a solucionar el error, es importante entender qué lo provoca. Las causas más habituales son:
- Aumento repentino de tráfico: tu web recibe más visitas de lo normal y cada visitante abre una conexión con la base de datos.
- Conexiones que no se cierran: algunas aplicaciones o plugins (especialmente en WordPress) no liberan las conexiones después de usarlas.
- Consultas lentas o bloqueos: si una consulta tarda demasiado, mantiene ocupada una conexión durante más tiempo del necesario.
- Configuración demasiado baja del límite: el valor por defecto en muchos servidores es 151 conexiones, que puede resultar insuficiente para sitios con mucho dinamismo.
- Ataques de fuerza bruta o bots: los bots maliciosos pueden abrir cientos de conexiones simultáneas para saturar tu servidor.
Paso 1: Accede a tu servidor y comprueba el estado actual
Lo primero que necesitas es acceder a tu servidor por SSH. Si usas un panel de control como Syspanel (recuerda que se accede por el puerto 2106), puedes abrir una terminal desde la propia interfaz. Si no, utiliza un cliente como PuTTY o Terminal.
Una vez dentro, ejecuta este comando para ver cuántas conexiones hay activas:
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"
Te mostrará un número. Si está muy cerca del límite máximo (que veremos a continuación), el problema está claro.
Para ver el límite actual configurado, ejecuta:
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
Anota ambos valores. Si Threads_connected es igual o está muy próximo a max_connections, ya sabes que has llegado al techo.
Paso 2: Aumenta temporalmente el límite de conexiones
Si el problema es urgente y necesitas que tu web vuelva a funcionar ya, puedes aumentar el límite de conexiones sin reiniciar MySQL. Este cambio es temporal y se pierde al reiniciar el servicio, pero te dará tiempo para aplicar una solución definitiva.
Ejecuta:
mysql -u root -p -e "SET GLOBAL max_connections = 500;"
Con esto, permites hasta 500 conexiones simultáneas. Puedes poner un número mayor o menor según lo que necesites. Recomiendo no superar las 1000 para evitar problemas de memoria.
[WARNING] Este cambio es temporal. Si reinicias MySQL o el servidor, volverá al valor original. Úsalo como parche mientras aplicas las soluciones definitivas.
Paso 3: Identifica qué está consumiendo las conexiones
Ahora toca investigar quién está usando tantas conexiones. Ejecuta este comando para ver las conexiones activas:
mysql -u root -p -e "SHOW PROCESSLIST;"
Verás una lista con todos los procesos. Presta atención a las columnas User, Host, Command y Time. Si ves muchos procesos en estado Sleep con tiempos largos, significa que hay aplicaciones que abren conexiones y no las cierran.
También puedes ver cuántas conexiones tiene cada usuario:
mysql -u root -p -e "SELECT user, host, COUNT(*) AS conexiones FROM information_schema.processlist GROUP BY user, host ORDER BY conexiones DESC;"
Esto te dirá qué usuario o qué IP está generando más conexiones. Si una IP concreta acumula cientos, puede ser un ataque o un bot.
Paso 4: Soluciones definitivas para el error "Too many connections"
4.1. Optimiza el código de tu aplicación
Si tu aplicación (WordPress, PrestaShop, etc.) no cierra las conexiones correctamente, el problema reaparecerá. Algunas recomendaciones:
- Actualiza tu CMS y plugins: las versiones antiguas suelen tener fugas de conexiones.
- Usa un plugin de caché: reduce drásticamente las consultas a la base de datos.
- Revisa el código personalizado: si tienes funciones que hacen consultas SQL, asegúrate de que cierran la conexión con
mysqli_close()o equivalente.
4.2. Cambia el límite de conexiones de forma permanente
Edita el archivo de configuración de MySQL. La ubicación típica es /etc/mysql/my.cnf o /etc/my.cnf. Busca la sección [mysqld] y añade o modifica esta línea:
max_connections = 300
Guarda el archivo y reinicia MySQL:
systemctl restart mysql
[INFO] El valor ideal depende de la memoria RAM de tu servidor. Como regla general, cada conexión consume aproximadamente 1-2 MB de RAM. Si tienes 4 GB de RAM, puedes permitirte 300-500 conexiones sin problema.
4.3. Reduce el tiempo de espera de las conexiones inactivas
Muchas conexiones se quedan en estado Sleep porque las aplicaciones las mantienen abiertas. Puedes reducir el wait_timeout para que MySQL cierre automáticamente las conexiones que llevan demasiado tiempo inactivas.
Añade esto al archivo de configuración:
wait_timeout = 60
interactive_timeout = 60
Con esto, cualquier conexión que lleve más de 60 segundos sin actividad se cerrará automáticamente. Esto libera recursos y evita que se acumulen conexiones fantasma.
4.4. Usa un pool de conexiones
Si tu aplicación lo permite, implementa un pool de conexiones como ProxySQL o MySQL Router. Estas herramientas gestionan las conexiones de forma eficiente y evitan que se sature el servidor.
[TIP] Si tu web está en WordPress, instala un plugin de optimización de base de datos como "WP Rocket" o "Query Monitor" para detectar consultas lentas y fugas de conexión.
Paso 5: Prevención a largo plazo
5.1. Monitoriza tus conexiones
Configura una alerta para que te avise cuando el número de conexiones supere el 80% del límite. Puedes usar herramientas como Nagios, Zabbix o incluso un script simple en cron que envíe un correo.
5.2. Protege tu servidor contra ataques
Si sospechas que el problema viene de bots o ataques, instala un firewall como Fail2ban. Esta herramienta bloquea automáticamente las IPs que hacen demasiadas conexiones en poco tiempo.
5.3. Escala tu infraestructura
Si tu web crece de forma sostenida, llegará un momento en que un solo servidor no sea suficiente. Considera:
- Separar la base de datos en un servidor dedicado.
- Usar servicios gestionados como Amazon RDS o Google Cloud SQL.
- Implementar réplicas de lectura para distribuir la carga.
Preguntas frecuentes (FAQ)
¿Qué significa exactamente "Too many connections"?
Significa que el servidor MySQL ha alcanzado el número máximo de conexiones simultáneas que tiene configuradas y rechaza nuevas peticiones. Es como un ascensor que no admite más pasajeros porque ya está lleno.
¿Cuál es el límite por defecto en MySQL?
Normalmente, el valor por defecto es 151 conexiones. Sin embargo, muchos proveedores de hosting lo reducen a 100 o incluso menos para proteger el servidor.
¿Puedo solucionar este error sin acceso SSH?
Si no tienes acceso SSH, contacta con tu proveedor de hosting. Muchos paneles como Syspanel (puerto 2106) permiten reiniciar MySQL o ajustar algunos parámetros desde la interfaz web. Si no, deberás abrir un ticket de soporte.
¿Cuántas conexiones necesita mi web?
Depende del tráfico y la complejidad de las consultas. Una web pequeña con 100 visitas simultáneas rara vez necesitará más de 20 conexiones. Una tienda online grande puede necesitar 200 o más.
¿Reiniciar MySQL soluciona el error?
Reiniciar MySQL libera todas las conexiones, así que sí, soluciona el problema de forma inmediata. Pero si la causa subyacente no se corrige, el error volverá a aparecer en cuanto el tráfico aumente.
¿Es peligroso aumentar el límite de conexiones?
Solo si lo aumentas demasiado. Cada conexión consume memoria, así que si pones un límite de 5000 en un servidor con 1 GB de RAM, podrías quedarte sin memoria y provocar que el servidor se bloquee.
Conclusión
El error "Too many connections" en MySQL es un problema común, pero perfectamente manejable si sigues estos pasos. Recuerda que la clave está en:
- Diagnosticar cuántas conexiones tienes y cuál es tu límite.
- Aplicar un parche temporal para recuperar el servicio.
- Corregir la causa raíz (código, configuración o ataques).
- Prevenir con monitorización y buenas prácticas.
Si tienes acceso a tu servidor y sigues esta guía paso a paso, en menos de una hora tendrás tu base de datos funcionando de nuevo. Y si en algún momento te sientes perdido, no dudes en contactar con tu proveedor de hosting o con un administrador de sistemas.
[TIP] Guarda esta guía en un lugar seguro. Te será útil la próxima vez que tu web experimente un pico de tráfico y el error aparezca de nuevo. La prevención es siempre más fácil que la solución.
