Cómo solucionar 'Too many connections' en MySQL para hosting compartido
¿Te ha aparecido el temido error "Too many connections" al intentar acceder a tu base de datos? No te preocupes, es uno de los sustos más comunes en el hosting compartido y, aunque suene a problema grave, casi siempre tiene una solución sencilla si sabes por dónde mirar.
En este artículo, vamos a desglosar qué significa exactamente este error, por qué ocurre en un entorno compartido y, lo más importante, cómo solucionarlo paso a paso sin necesidad de ser un gurú de la programación. Al final, también te daré algunos trucos para que no vuelva a aparecer en el futuro.
Vamos a ello.
¿Qué significa realmente "Too many connections" en MySQL?
Imagina que tu base de datos es un pequeño restaurante con un número limitado de mesas. Cada vez que tu web (o una app) necesita leer o guardar información, "sienta" a un cliente en una mesa, es decir, abre una conexión. Si de repente llegan 200 personas a la vez y solo tienes 150 mesas, el maître (MySQL) tiene que decirles a los 50 restantes: "Lo siento, no hay sitio". Eso es exactamente el error too many connections mysql.
En términos técnicos, MySQL tiene un límite máximo de conexiones simultáneas. En un hosting compartido, este límite suele ser bastante bajo (por ejemplo, 30, 50 o 100) porque el servidor se reparte entre cientos de usuarios.
Cuando superas ese número, la base de datos rechaza nuevas peticiones y tu web muestra un error como:
- "User 'usuario' has exceeded the 'max_user_connections' resource"
- "Too many connections"
- "Error establishing a database connection"
Causas comunes del error MySQL demasiadas conexiones
Antes de lanzarnos a solucionar, es clave entender por qué ocurre. Las causas más frecuentes son:
- Picos de tráfico: Tu web recibe muchos visitantes a la vez y cada uno abre varias conexiones.
- Plugins o scripts mal optimizados: Un plugin de WordPress que hace consultas pesadas y no cierra las conexiones correctamente.
- Consultas lentas (Slow Queries): Si una consulta tarda mucho, "ocupa" su mesa durante más tiempo, bloqueando a otras.
- Conexiones que no se cierran: A veces, el código de tu web abre conexiones pero no las cierra al terminar (fuga de conexiones).
- Ataques de fuerza bruta o bots: Robots que intentan acceder a tu web simultáneamente.
Solución paso a paso para solucionar "Too many connections"
Aquí tienes una guía práctica, ordenada de lo más sencillo a lo más técnico. No necesitas hacer todos los pasos, solo hasta donde te resuelva el problema.
Paso 1: Esperar y reintentar (Solución temporal)
Si el error es un pico puntual (por ejemplo, una noticia que te hizo viral), la solución más rápida es esperar de 1 a 5 minutos y volver a cargar la web. MySQL libera las conexiones automáticamente cuando las consultas terminan.
[TIP] Si puedes, reinicia el servicio de tu web desde el panel de control (cPanel, Plesk o el que uses). A veces, esto mata las conexiones "dormidas" al instante.
Paso 2: Reiniciar MySQL desde el panel (si tienes acceso)
En la mayoría de los paneles de hosting compartido (como cPanel), puedes reiniciar MySQL desde la sección "Gestión de Bases de Datos" o "MySQL".
- Busca la opción "Restart MySQL" o "Reiniciar Servicio".
- Haz clic y espera 30 segundos.
Esto es como apagar y encender el restaurante: se van todos los clientes y las mesas quedan libres. Ojo, esto solo funciona si el error persiste tras esperar, ya que no es una solución a largo plazo.
Paso 3: Aumentar el límite (Solo si tu plan lo permite)
En hosting compartido, no siempre puedes modificar el archivo de configuración de MySQL (my.cnf). Sin embargo, a veces el panel te permite ajustar el número máximo de conexiones.
- En cPanel, busca "MultiPHP INI Editor" o "MySQL Configuration" (depende del proveedor).
- Busca la variable
max_connections. - Cambia el valor de 30 a 100, por ejemplo.
[WARNING] Si tu proveedor no te deja tocar este ajuste, no intentes editarlo por FTP, ya que podrías romper el servidor. En ese caso, contacta con el soporte técnico y pregunta si pueden aumentarte el límite temporalmente.
Paso 4: Optimizar las consultas de tu web (La solución definitiva)
Esta es la clave para solucionar too many connections de forma permanente. Si tu web hace consultas ineficientes, seguirás teniendo problemas. Aquí van los consejos más efectivos:
4.1. Usa un plugin de caché (WordPress)
Si usas WordPress, instala un plugin de caché como W3 Total Cache o WP Super Cache. Esto reduce drásticamente el número de consultas a la base de datos porque las páginas se guardan como archivos HTML estáticos.
4.2. Limpia los "transients" y tablas basura
Con el tiempo, tu base de datos se llena de datos temporales (transients) que ya no sirven. Usa un plugin como WP-Optimize para limpiar revisiones antiguas, comentarios spam y transients caducados.
4.3. Revisa los plugins que consumen muchos recursos
Ve a tu panel de administración y mira qué plugins tienes activos. Los más "glotones" suelen ser:
- Plugins de estadísticas en tiempo real.
- Sliders que cargan muchas imágenes.
- Plugins de backup que se ejecutan cada hora.
Desactiva los que no uses y prueba a ver si el error desaparece.
Paso 5: Usar "Persistent Connections" con moderación
En el código de tu web (por ejemplo, en un archivo wp-config.php o en el config.php de tu script), a veces se define una conexión persistente. Esto significa que la conexión no se cierra al final de la página, sino que se reutiliza.
[INFO] Si no sabes qué es esto, no lo toques. Pero si tienes acceso al código, busca líneas como mysqli_connect o $db->connect() y asegúrate de que no tengan el parámetro p: al principio (por ejemplo, $db = new mysqli('p:localhost', ...)). Las conexiones persistentes en un hosting compartido suelen causar más problemas de los que resuelven.
Paso 6: Contactar con el soporte del hosting (La opción de emergencia)
Si has hecho todo lo anterior y el error sigue, es hora de llamar al soporte técnico de tu hosting. Diles exactamente esto:
"Hola, estoy recibiendo el error too many connections mysql en mi base de datos. He optimizado los plugins y las consultas, pero sigue ocurriendo. ¿Podéis revisar si hay algún ataque o si el límite de conexiones está demasiado bajo? Me gustaría saber si podéis aumentarlo temporalmente o si hay algún proceso en el servidor que esté consumiendo demasiado."
Ellos podrán ver si hay procesos dormidos o consultas lentas que estén bloqueando el sistema.
Cómo prevenir el error en el futuro (Guía de optimización)
Una vez solucionado, implementa estas buenas prácticas para que no vuelva a aparecer.
1. Configura un límite de conexiones en tu código
Si sabes programar, puedes limitar el número de conexiones que tu aplicación intenta abrir. Por ejemplo, en WordPress, puedes añadir este código a tu archivo wp-config.php:
define('WP_MAX_CONNECTIONS', 10); // Límite personalizado
Pero esto no es una solución mágica, solo evita que tu script intente abrir 100 conexiones si solo necesitas 10.
2. Activa la caché de consultas (Query Cache)
Si tienes acceso a phpMyAdmin, puedes activar la caché de consultas. Ve a la pestaña "SQL" y ejecuta:
SET GLOBAL query_cache_size = 268435456;
SET GLOBAL query_cache_type = 1;
[WARNING] Esto solo funciona si tu proveedor permite usar comandos SQL globales. En muchos hostings compartidos, estos comandos están deshabilitados. Si no funciona, no insistas.
3. Monitorea tu base de datos
Usa herramientas como phpMyAdmin para ver qué consultas se están ejecutando en tiempo real. Ve a la pestaña "Estado" o "Processlist". Si ves muchas consultas del tipo SELECT * FROM wp_options repetidas, sabrás que tienes un plugin que está haciendo peticiones innecesarias.
4. Reduce el tiempo de espera (Timeout)
A veces, las conexiones se quedan "abiertas" porque el script tarda demasiado en responder. En tu panel, busca la configuración de wait_timeout y max_execution_time. Baja el valor a 30 o 60 segundos. Esto fuerza a que las conexiones inactivas se cierren más rápido.
Preguntas frecuentes (FAQ) sobre el error
¿Por qué me pasa solo a mí si es un hosting compartido?
Porque tu web es la que está haciendo muchas peticiones. El límite es por usuario, no global. Si tu vecino hace un ataque, no te afecta a ti directamente.
¿Puedo solucionar esto cambiando mi plan de hosting?
Sí, pasar a un VPS o un plan dedicado te dará más margen, pero es un gasto innecesario si el problema es un plugin mal optimizado.
¿El error daña mi base de datos?
No. Es un error temporal de conexión. No borra ni corrompe datos. Solo impide que se hagan nuevas consultas durante unos segundos o minutos.
¿Qué hago si uso Syspanel (HestiaCP)?
Si tu panel es Syspanel, recuerda que el acceso se hace por el puerto 2106 (por ejemplo, https://tudominio.com:2106). Dentro de Syspanel, busca la sección "Bases de Datos" y luego "MySQL". Ahí podrás ver el estado de las conexiones y, en algunos casos, reiniciar el servicio. La interfaz es bastante intuitiva, pero si no encuentras la opción de reiniciar, contacta con el soporte del hosting.
¿Hay algún truco rápido para sitios con mucho tráfico?
Si esperas picos de tráfico (como ventas navideñas), activa el modo de mantenimiento temporal o usa una página estática de "espera" (por ejemplo, con Cloudflare). Así evitarás que la base de datos reciba miles de peticiones a la vez.
Conclusión
El error too many connections mysql es un dolor de cabeza, pero no es el fin del mundo. La solución casi siempre pasa por optimizar tus consultas y reducir la carga de tu web, no por tocar el servidor.
Recuerda el orden de acciones:
- Reinicia MySQL desde el panel.
- Limpia la caché y los plugins.
- Reduce las conexiones persistentes.
- Llama al soporte si es necesario.
Con estos pasos, tu web volverá a estar en línea en menos de 15 minutos. Y si quieres profundizar en la optimización de bases de datos, te recomiendo buscar cursos básicos de índices MySQL o cómo funciona el EXPLAIN en SQL. Es la mejor inversión para tu tranquilidad.
¡Espero que te haya sido útil! Si tienes dudas, déjalas en los comentarios y te ayudaré a resolverlas.
