Cómo solucionar el error 'Too many connections' en MySQL de tu hosting
¿Tu página web se ha quedado congelada y al intentar entrar en el panel de control de tu base de datos te aparece un mensaje en rojo que dice "Too many connections"?
No te preocupes, no has roto nada. Este es uno de los avisos más comunes en el mundo del hosting y, aunque suene a chino, tiene una explicación muy sencilla y, sobre todo, una solución práctica.
En esta guía extensa y paso a paso, vamos a desmontar ese error, entender por qué ocurre y, lo más importante, cómo solucionarlo de forma definitiva para que tu web vuelva a volar. Vamos a ello.
¿Qué significa exactamente "Too many connections"?
Imagina que tu base de datos MySQL es un restaurante muy popular. Tiene un número limitado de mesas (conexiones). Cada vez que alguien entra a comer (tu web, un plugin, una app), ocupa una mesa.
Si el restaurante solo tiene 100 mesas y de repente llegan 150 personas (peticiones), las 50 restantes se quedan en la puerta esperando. En el mundo de las bases de datos, esas 50 personas que se quedan fuera reciben el error too many connections mysql.
En términos técnicos, tu servidor tiene un límite llamado max_connections. Este número define cuántos procesos pueden estar abiertos simultáneamente contra tu base de datos. Cuando se supera, MySQL rechaza nuevas conexiones para proteger al servidor de un colapso total.
[INFO] Este límite no es un capricho. Existe para evitar que un ataque o un error de código consuma toda la memoria del servidor y afecte a otros sitios web alojados en la misma máquina.
Las 5 causas más habituales de este error
Antes de lanzarnos a tocar configuraciones, es vital saber qué está provocando el atasco. Las causas suelen ser estas:
- Picos de tráfico masivos: Tu web sale en portada de un medio importante y de repente tienes miles de visitas. Es la causa más "bonita" porque significa que tu contenido funciona, pero la infraestructura no está preparada.
- Consultas SQL lentas (Queries lentas): Algún plugin o función del tema está haciendo consultas demasiado pesadas. Estas consultas bloquean la tabla y acumulan conexiones esperando a que se libere.
- Conexiones que no se cierran: A veces, un script PHP tiene un fallo y no cierra la conexión a la base de datos al terminar. Es como si los clientes del restaurante se quedaran en la mesa horas después de pagar.
- Malware o scripts maliciosos: Un código infectado puede estar haciendo cientos de peticiones simultáneas a tu BD para robar datos o ralentizar el servidor.
- Configuración baja del servidor: Simplemente, el plan de hosting que contrataste tiene un límite de
max_connectionsmuy bajo (ej. 10 o 15) y tu web necesita más.
Solución Paso a Paso: De lo simple a lo técnico
Vamos a arreglarlo. Sigue estos pasos en orden, ya que van de lo más fácil y menos invasivo a lo más complejo.
Paso 1: Reinicia tu conexión (El clásico "apagar y encender")
A veces, el error es un simple pico puntual. Si tu web está caída ahora mismo, intenta esto:
- Espera de 2 a 5 minutos: MySQL suele liberar las conexiones huérfanas automáticamente tras un tiempo de espera (timeout).
- Reinicia tu router o cambia de red: Si el error te sale a ti al intentar conectar con un cliente FTP o de escritorio, puede ser que tu IP esté saturada de intentos fallidos.
- Reinicia el servicio desde tu panel de control: Busca en tu hosting (cPanel, Plesk, o el panel que uses) la opción de "Restart MySQL" o "Reiniciar base de datos".
[WARNING] Si el error persiste después de 10 minutos, pasa al siguiente paso. No reinicies el servidor 20 veces seguidas, podrías empeorar la situación.
Paso 2: Accede por la puerta de atrás (Syspanel)
Si el panel principal de tu web está caído, necesitas acceder a la gestión de archivos o a la terminal. Si tu hosting usa Syspanel (antes conocido como HestiaCP), recuerda que el acceso a la gestión avanzada se realiza por el puerto 2106.
Para ello, escribe en tu navegador: https://tudominio.com:2106
Esto te dará acceso a un panel más técnico donde podrás:
- Ver el uso de recursos en tiempo real.
- Acceder a la consola de comandos (Shell).
- Gestionar los servicios del servidor.
Paso 3: Identifica al culpable (Las consultas lentas)
No puedes adivinar qué script está fallando. Necesitas datos. Dentro de Syspanel (o tu panel), busca la sección de Registros de Errores de MySQL o activa el Slow Query Log (registro de consultas lentas).
Si no sabes cómo hacerlo, usa esta consulta SQL desde phpMyAdmin o la consola:
SHOW PROCESSLIST;
Este comando te mostrará una tabla con todas las conexiones activas.
- Columna
Time: Si ves valores muy altos (más de 100 segundos), esa consulta está bloqueando el sistema. - Columna
Command: Si ves muchos estadosSleep, significa que hay conexiones abiertas que no se usan.
El plan de acción en este paso: Anota el ID del proceso que está tardando demasiado y elimínalo con:
KILL ID_DEL_PROCESO;
Esto liberará el hueco de inmediato (efecto inmediato, pero es un parche temporal).
Paso 4: Aumenta el límite (max_connections)
Si el error es recurrente y tu web es legítima, es hora de subir el límite. Esto se hace editando el archivo de configuración de MySQL (my.cnf o my.ini).
[INFO] No todos los hostings permiten esto. Si tu plan es compartido, deberás contactar con soporte. Si tienes un VPS o un hosting dedicado, sigue estos pasos:
-
Accede por SSH a tu servidor.
-
Abre el archivo de configuración. Normalmente es:
nano /etc/mysql/my.cnfo
nano /etc/my.cnf -
Busca la sección
[mysqld]y añade o modifica esta línea:max_connections = 150(Puedes poner 100, 200 o 300, pero no te pases. 150 es un buen número para empezar).
-
Guarda el archivo (Ctrl + X, luego Y, luego Enter).
-
Reinicia MySQL para aplicar los cambios:
service mysql restarto
systemctl restart mysql
Paso 5: Optimiza las conexiones de tu web (La clave a largo plazo)
Subir el límite es como poner más mesas en el restaurante, pero si la cocina es lenta, el problema volverá. La solución real es optimizar conexiones bd.
Esto significa que tu aplicación debe usar menos conexiones y hacerlo de forma más eficiente.
5.1. Usa un plugin de caché
Si usas WordPress (el 90% de los casos), instala un plugin de caché como W3 Total Cache o WP Super Cache.
- ¿Qué hace? Genera páginas HTML estáticas y las sirve sin tener que consultar la base de datos. Si tu web tiene 1000 visitas, solo 10 tocan la BD, el resto lee el archivo estático.
5.2. Optimiza el código de tus plugins
Muchas veces el error lo causa un plugin de estadísticas, un slider pesado o un plugin de backup que se ejecuta demasiado a menudo.
- Revisa los plugins: Desactiva todos los plugins y actívalos uno a uno. Cuando el error vuelva a aparecer, habrás encontrado al culpable.
- Actualiza todo: Mantén WordPress, temas y plugins siempre actualizados. Las nuevas versiones suelen corregir fugas de memoria.
5.3. Configura el "Persistent Connection" (Solo para avanzados)
En tu archivo de configuración de PHP (wp-config.php en WordPress), puedes indicar que las conexiones persistan:
define('WP_USE_EXT_MYSQL', false);
define('MYSQL_CLIENT_FLAGS', MYSQL_CLIENT_COMPRESS);
[WARNING] Si no sabes lo que estás haciendo, no toques esto. Una configuración incorrecta puede romper tu web por completo.
Preguntas Frecuentes (FAQ)
Hemos recopilado las dudas que más nos llegan al soporte sobre este tema.
¿Puedo solucionar el error "too many connections mysql" sin acceso a SSH?
Sí. La mayoría de los paneles de control modernos (como Syspanel en el puerto 2106 o cPanel) tienen un botón llamado "Restart MySQL" o "Repair Database". Úsalo. Además, puedes limpiar la caché de tu web desde el propio panel para liberar conexiones.
¿Cuál es un buen valor para max_connections?
Depende de la memoria RAM de tu servidor. Una regla general es:
- 1GB RAM:
max_connections = 50 - 2GB RAM:
max_connections = 100 - 4GB RAM:
max_connections = 150
Superar los 200 en un servidor pequeño puede provocar que MySQL se quede sin memoria y se bloquee por completo.
¿El error "Too many connections" es un ataque DDoS?
Puede serlo, pero no es lo habitual. Si el ataque es real, verás un aumento masivo de tráfico en las estadísticas. Si el error ocurre con tu web en reposo (sin visitas), es más probable que sea un script interno que se ha quedado en bucle.
¿Cómo evito que esto vuelva a pasar?
La combinación ganadora es:
- Caché agresiva para reducir la carga.
- Monitorización: Usa herramientas como Google Analytics o servicios de uptime para recibir alertas si tu web se cae.
- Contrata un buen hosting: Si tu web crece, necesitarás un plan con más recursos. No escatimes en esto.
Resumen final: Tu plan de acción
Para terminar, te dejamos una hoja de ruta rápida para que no te pierdas:
- Diagnostica: ¿Es un pico puntual o es constante?
- Actúa rápido: Reinicia MySQL desde el panel (Syspanel en el puerto 2106).
- Limpia: Usa
SHOW PROCESSLISTy mata los procesos zombies. - Configura: Sube
max_connectionssi tienes permisos. - Optimiza: Instala caché y audita tus plugins.
[TIP] Si después de seguir todos estos pasos el error persiste, el problema ya no es de configuración, sino de recursos. Es el momento de plantearte migrar a un servidor VPS o a un plan dedicado donde tengas el control total de los parámetros de MySQL.
Esperamos que esta guía te haya sido de ayuda. Recuerda que la prevención es la mejor cura: revisa la salud de tu base de datos una vez al mes y mantén todo actualizado. Si tienes más dudas, nuestro equipo de soporte está a un clic de distancia.
