🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo corregir el error 'Too many connections' en MySQL (Hosting compartido)

Actualizado el 7 de diciembre de 2025

¿Estás viendo el temido mensaje "Too many connections" en tu web? No te preocupes, es uno de los errores más comunes en hosting compartido y, aunque suena a problema grave, tiene solución. En esta guía extensa y paso a paso, vamos a explicarte qué significa exactamente este error, por qué ocurre y, lo más importante, cómo solucionarlo incluso si no eres un experto en bases de datos.

Vamos a desglosarlo todo con un lenguaje claro, ejemplos prácticos y soluciones que puedes aplicar desde el panel de control de tu hosting (como cPanel o Syspanel) sin necesidad de tocar archivos de configuración del servidor (aunque también te enseñaremos un truco avanzado).


¿Qué significa el error "Too many connections" en MySQL?

Primero, lo básico. Imagina que tu base de datos MySQL es un restaurante muy popular. El restaurante tiene un número limitado de mesas (conexiones). Cuando todas las mesas están ocupadas, los nuevos clientes (solicitudes de tu web) tienen que esperar fuera. Si la espera es demasiado larga o no hay sitio, el restaurante les dice: "Lo siento, estamos llenos".

Eso es exactamente lo que hace MySQL. El servidor tiene un límite llamado max_connections. Este valor define cuántas conexiones simultáneas puede aceptar. En un hosting compartido, este número suele ser bajo (entre 10 y 30) porque el servidor se reparte entre muchos usuarios.

Cuando tu web (por ejemplo, WordPress) intenta hacer más conexiones de las permitidas, MySQL te devuelve el error:

ERROR 1040: Too many connections

Este error no significa que tu web esté caída para siempre, sino que el servidor está saturado en ese momento. Puede aparecer en el panel de administración, en el front-end de tu web o incluso al conectar con herramientas como phpMyAdmin.


¿Por qué ocurre este error en un hosting compartido?

El hosting compartido es como un edificio de apartamentos con una sola caldera de agua caliente. Si todos los vecinos se duchan a la vez, el agua sale fría. Con MySQL pasa igual.

Las causas más habituales son:

  • Picos de tráfico repentinos: Un artículo viral, una campaña de email o un bot atacando tu web pueden generar cientos de solicitudes a la vez.
  • Código ineficiente: Un plugin mal optimizado o un tema que hace consultas innecesarias a la base de datos.
  • Conexiones que no se cierran: A veces, el código de tu web abre una conexión a MySQL pero no la cierra al terminar. Esto deja "mesas ocupadas" para siempre.
  • Consultas lentas: Si una consulta tarda mucho (por ejemplo, 10 segundos), mantiene la conexión ocupada durante todo ese tiempo, bloqueando nuevas peticiones.
  • Otros usuarios del servidor: En hosting compartido, un vecino con una web muy pesada puede consumir todos los recursos, afectando a tu MySQL.

Paso 1: Verifica si el error es intermitente o constante

Antes de tocar nada, necesitas saber si el problema es puntual o crónico.

  • Si es intermitente: Aparece solo en horas punta o cuando tienes mucho tráfico. Es más fácil de solucionar con optimización.
  • Si es constante: Ocurre incluso con pocas visitas. El problema puede ser un bucle infinito en tu web, un plugin conflictivo o una configuración incorrecta.

Cómo comprobarlo: Entra a tu web varias veces al día durante una semana. También revisa los logs de errores de tu hosting. En cPanel, busca "Error Logs" o "Métricas". En Syspanel, puedes ver los logs desde el administrador de archivos o consultando el soporte.


Paso 2: Solución rápida y temporal: Reiniciar MySQL

Esto es como apagar y encender el router. No arregla la causa, pero te da un respiro inmediato.

Desde cPanel (la mayoría de hostings):

  1. Accede a tu panel de control.
  2. Busca la sección "Bases de datos" o "MySQL".
  3. Encuentra la opción "MySQL Server" o "Administración de MySQL".
  4. Haz clic en "Reiniciar" o "Restart".

Desde Syspanel (si tu hosting usa este panel):

  1. Accede a tu panel a través del puerto 2106 (ejemplo: https://tudominio.com:2106).
  2. Ve a "Servicios" o "Servidor".
  3. Busca "MySQL" y pulsa el botón de reinicio.

[WARNING] OJO: Esta acción cerrará todas las conexiones activas. Si tienes usuarios escribiendo en tu web en ese momento, perderán los cambios no guardados. Úsala solo como último recurso o en horas de bajo tráfico.


Paso 3: Aumentar el límite de max_connections (la solución más directa)

La solución más obvia es pedirle a MySQL que acepte más conexiones. El problema es que en hosting compartido no puedes modificar el archivo my.cnf (el archivo de configuración de MySQL) directamente. Pero hay dos formas de intentarlo:

Opción A: Desde el panel de control (si tu hosting lo permite)

Algunos hostings (como los de gama media) ofrecen un ajuste para esto.

  1. En cPanel, busca "MultiPHP INI Editor" o "Configuración de MySQL".
  2. Si encuentras una opción llamada max_connections, cámbiala a un valor más alto (por ejemplo, de 20 a 50).
  3. Guarda los cambios y reinicia MySQL.

Opción B: Solicitar el cambio al soporte técnico

Si no encuentras la opción, escríbele a tu proveedor de hosting. Diles que necesitas aumentar max_connections por un problema de rendimiento.

[TIP] Frase mágica para el soporte: "Hola, estoy recibiendo el error too many connections mysql. He optimizado mis consultas (o lo haré) pero necesito un aumento temporal del límite max_connections a 50 para estabilizar la web. ¿Podéis aplicarlo?" La mayoría de hostings lo hacen sin problema si es una petición razonable.


Paso 4: Optimizar las conexiones de tu aplicación (la solución real)

Aumentar el límite es un parche. La solución definitiva es que tu web necesite menos conexiones. Esto se logra optimizando el código y la configuración.

4.1. Usa un plugin de caché (si usas WordPress)

La caché reduce drásticamente las consultas a MySQL. Un plugin como W3 Total Cache, WP Rocket o LiteSpeed Cache (si tu hosting usa LiteSpeed) puede reducir las conexiones en un 90%.

  1. Instala un plugin de caché.
  2. Activa la caché de páginas (Page Cache).
  3. Activa la caché de objetos (Object Cache) si tu hosting lo soporta.

[INFO] ¿Por qué funciona? Con la caché activa, tu web genera una copia estática HTML de tus páginas. Cuando un visitante entra, no se ejecuta PHP ni se consulta MySQL, solo se sirve el archivo estático. Menos consultas = menos conexiones ocupadas.

4.2. Revisa los plugins y temas

Un plugin mal codificado puede abrir 10 conexiones por página. Desactiva todos los plugins y ve activándolos uno a uno. Cuando el error vuelva a aparecer, habrás encontrado al culpable.

4.3. Optimiza las consultas SQL

Si eres desarrollador, revisa que tus consultas usen índices y no hagan SELECT * innecesarios. Un plugin como Query Monitor (en WordPress) te muestra cuántas consultas se hacen por página y cuánto tardan.

4.4. Configura correctamente el pool de conexiones (para desarrolladores)

Si tu aplicación usa un framework (Laravel, Symfony, etc.), configura el connection pool para que reutilice conexiones en lugar de crear una nueva por cada petición.

Ejemplo en Laravel (config/database.php):

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
    'options' => [
        PDO::ATTR_PERSISTENT => true, // <--- ESTO ES CLAVE
    ],
],

PDO::ATTR_PERSISTENT => true hace que PHP reutilice las conexiones ya abiertas en lugar de abrir y cerrar constantemente.


Paso 5: Reduce el tiempo de vida de las conexiones

MySQL tiene un parámetro llamado wait_timeout. Si una conexión está inactiva más de X segundos, se cierra automáticamente. En hosting compartido, este valor suele ser de 30 segundos, pero puedes intentar reducirlo.

No puedes cambiar el my.cnf, pero puedes ejecutar una consulta SQL para cambiar el valor en tu sesión actual (no es permanente, pero ayuda).

Desde phpMyAdmin:

  1. Entra a phpMyAdmin (desde cPanel o Syspanel).
  2. Haz clic en "SQL" (o "Consultas").
  3. Ejecuta: SET SESSION wait_timeout = 15;

[TIP] Esto no es una solución permanente, pero si tu web tiene picos, puedes configurar un cron job para ejecutar esta consulta cada 5 minutos. Es un truco avanzado, pero funciona.


Paso 6: Busca consultas lentas y corrígelas

Las consultas lentas son asesinas de conexiones. Si una consulta tarda 5 segundos, mantiene ocupada una conexión durante 5 segundos. Con 20 conexiones, solo 4 consultas lentas simultáneas saturan tu sistema.

Cómo encontrarlas:

  1. En cPanel, busca "Slow Query Log" o "Registro de consultas lentas".
  2. Si no lo tienes, activa un plugin como Query Monitor.
  3. Analiza las consultas que tarden más de 1 segundo.

Soluciones comunes:

  • Añadir índices a las columnas que se usan en WHERE o JOIN.
  • Evitar LIKE '%texto%' (no usa índices).
  • Limitar los resultados con LIMIT.

Paso 7: Considera migrar a un hosting más potente

Si has hecho todo lo anterior y el error persiste, es hora de ser honesto: tu hosting compartido no da abasto. Esto no es un fracaso tuyo, sino una limitación del servicio.

Señales de que necesitas un VPS o hosting dedicado:

  • El error ocurre incluso con tráfico bajo.
  • El soporte del hosting te dice que "no pueden hacer nada más".
  • Tu web usa aplicaciones pesadas (tiendas online grandes, foros, etc.).

Un VPS (Servidor Virtual Privado) te permite controlar max_connections, wait_timeout y todos los parámetros de MySQL a tu gusto.


Preguntas frecuentes (FAQ) sobre el error

¿El error "Too many connections" puede dañar mi base de datos?

No. El error solo impide nuevas conexiones, pero no corrompe los datos existentes. Es como un semáforo en rojo: no deja pasar coches, pero no daña la carretera.

¿Cuál es el valor ideal de max_connections?

En hosting compartido, entre 20 y 50 es normal. En un VPS, puedes tener 200 o más. Todo depende de la RAM de tu servidor.

¿Puedo aumentar max_connections desde phpMyAdmin?

No. max_connections es una variable global que solo se puede cambiar editando el archivo de configuración del servidor. Desde phpMyAdmin solo puedes ver el valor actual ejecutando SHOW VARIABLES LIKE 'max_connections';.

¿El error tiene relación con el SEO?

Sí, indirectamente. Si tu web devuelve errores 500 o tarda mucho en cargar, Google puede penalizar tu posicionamiento. Un error de base de datos hace que tu web no cargue, lo que afecta a la experiencia del usuario y al rastreo de Google.

¿Qué hago si el error aparece solo en el admin de WordPress?

Eso indica que un plugin de administración está haciendo demasiadas consultas. Desactiva los plugins de estadísticas, backups o seguridad que se ejecuten en el backend.


Resumen final: Tu plan de acción

  1. Diagnóstico: Comprueba si el error es intermitente o constante.
  2. Solución rápida: Reinicia MySQL o pide al soporte que aumente max_connections.
  3. Optimización: Instala un plugin de caché y revisa tus plugins.
  4. Código: Si eres desarrollador, activa conexiones persistentes (PDO::ATTR_PERSISTENT).
  5. Monitorización: Usa Query Monitor para encontrar consultas lentas.
  6. Escalado: Si nada funciona, plantéate un VPS.

Recuerda que el error "too many connections" es un síntoma, no la enfermedad. La enfermedad es que tu web necesita más recursos de los que tu hosting le da. Con paciencia y los pasos de esta guía, podrás solucionarlo y mantener tu web estable.

[WARNING] Último consejo: No intentes modificar archivos del sistema en hosting compartido si no sabes lo que haces. Puedes romper el servidor y afectar a otros usuarios. Siempre es mejor pedir ayuda al soporte técnico.

Espero que esta guía te haya sido útil. Si te ha funcionado, compártela con otros usuarios que estén pasando por lo mismo. ¡Nos vemos en el próximo artículo!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel