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

Solucionar error 'Too many connections' en MySQL en DirectAdmin

Actualizado el 2 de noviembre de 2025

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

Imagina que tu base de datos es un pequeño restaurante con un número limitado de mesas. Cuando todas las mesas están ocupadas, los nuevos clientes tienen que esperar fuera o, directamente, se van. Eso es exactamente lo que ocurre con MySQL: tiene un número máximo de conexiones simultáneas permitidas. Cuando se supera ese límite, cualquier nueva petición de conexión recibe el temido mensaje: "Too many connections".

Este error es muy común en servidores compartidos o VPS con DirectAdmin, especialmente si tienes varias aplicaciones web (WordPress, tiendas online, foros) que realizan muchas consultas a la vez. También puede aparecer si algún script tiene un bug y no cierra las conexiones correctamente.

¿Por qué es importante solucionarlo rápido? Porque mientras este error persista, tu web estará caída para los visitantes, lo que afecta al SEO (Google penaliza la lentitud y los errores del servidor) y a la experiencia del usuario.


¿Cómo saber si tienes este problema en DirectAdmin?

Antes de lanzarte a solucionar nada, es fundamental confirmar que el error proviene del límite de conexiones. Puedes hacerlo de varias formas:

1. Revisa los logs de error

En DirectAdmin, ve a Gestión de Logs o usa el visor de logs del panel. Busca entradas como:

[Warning] Aborted connection ... to db: 'tu_basededatos' ... (Got timeout reading communication packets)

O directamente:

ERROR 1040: Too many connections

2. Prueba a conectar por SSH

Si tienes acceso SSH, ejecuta este comando:

mysql -u usuario -p -e "SHOW STATUS LIKE 'Threads_connected';"

El valor que te devuelva te dirá cuántas conexiones activas hay en ese momento. Si está cerca o supera el valor de max_connections, ese es tu problema.

3. Comprueba el límite actual

También puedes ver cuál es el límite máximo configurado con:

mysql -u usuario -p -e "SHOW VARIABLES LIKE 'max_connections';"

Normalmente, el valor por defecto en servidores con DirectAdmin suele ser 100 o 150, aunque puede variar según el proveedor.


Soluciones paso a paso para "too many connections" en DirectAdmin

Ahora vamos a lo importante: cómo arreglarlo. Te presento varias estrategias, ordenadas de la más sencilla a la más avanzada. Empieza siempre por la primera.

Solución 1: Reiniciar MySQL (solución temporal inmediata)

Si tu web está caída y necesitas recuperarla ya, reiniciar MySQL liberará todas las conexiones y dejará temporalmente el sistema operativo. Es una solución rápida pero no definitiva, porque el problema volverá a aparecer.

Pasos para reiniciar MySQL en DirectAdmin:

  1. Accede a tu panel de DirectAdmin.
  2. Ve a Administración de Servicios (o Service Management).
  3. Busca el servicio MySQL (o MariaDB).
  4. Haz clic en el botón Reiniciar (icono de flecha circular).

Alternativa por SSH:

/etc/init.d/mysql restart

O si usas systemd:

systemctl restart mysql

[WARNING] Esta acción cortará todas las conexiones activas. Si tienes usuarios escribiendo en tu web en ese momento, podrían perder datos no guardados. Úsala solo como último recurso.


Solución 2: Aumentar el valor de max_connections

Esta es la solución más directa al error. Consiste en decirle a MySQL que admita más conexiones simultáneas. Es importante hacerlo con cuidado, porque cada conexión consume memoria del servidor. Si pones un valor demasiado alto, podrías agotar la RAM y causar problemas más graves.

Cómo aumentar max_connections en DirectAdmin:

  1. Accede por SSH a tu servidor.
  2. Localiza el archivo de configuración de MySQL. Suele estar en /etc/my.cnf o /etc/mysql/my.cnf.
  3. Abre el archivo con un editor de texto, por ejemplo:
nano /etc/my.cnf
  1. Busca la sección [mysqld]. Si no existe, créala al final del archivo.
  2. Añade o modifica la línea:
max_connections = 200
  1. Guarda el archivo (Ctrl+O, luego Enter) y sal (Ctrl+X).
  2. Reinicia MySQL como te expliqué antes.

¿Qué valor poner? Depende de tu RAM. Una regla aproximada es: cada conexión consume unos 2-3 MB. Si tienes 4 GB de RAM, podrías poner 300 sin problema. Si tienes 1 GB, no superes los 150.

[INFO] Algunos proveedores de hosting no permiten modificar este archivo en planes compartidos. Si no puedes editarlo, contacta con soporte para que lo hagan ellos.


Solución 3: Identificar y optimizar las consultas problemáticas

A veces, el límite de conexiones se alcanza porque una aplicación está haciendo demasiadas consultas simultáneas. Esto suele pasar con WordPress y plugins mal optimizados.

Pasos para detectar el problema:

  1. Activa el log de consultas lentas en MySQL. En el archivo my.cnf, dentro de [mysqld], añade:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
  1. Reinicia MySQL.
  2. Deja pasar unas horas y revisa el archivo de log:
tail -100 /var/log/mysql-slow.log
  1. Verás las consultas que tardan más de 2 segundos. Identifica de qué aplicación provienen y actúa en consecuencia.

Soluciones comunes:

  • En WordPress: instala un plugin de caché (como W3 Total Cache o WP Super Cache) para reducir las consultas a la base de datos.
  • En tiendas online: revisa los plugins de carrito y los procesos de actualización de stock.
  • En cualquier aplicación: asegúrate de que los scripts cierran las conexiones con mysqli_close() o equivalentes al terminar.

Solución 4: Usar herramientas de monitorización en DirectAdmin

DirectAdmin incluye algunas herramientas que te ayudan a ver el estado de MySQL en tiempo real.

Cómo usarlas:

  1. En DirectAdmin, ve a Métricas del Sistema o Monitor de Recursos.
  2. Busca la sección de MySQL. Verás gráficos de conexiones activas, consultas por segundo y uso de memoria.
  3. Si ves que las conexiones se mantienen siempre al 100%, es que tienes un problema de fugas de conexiones en alguna aplicación.

[TIP] Si observas que las conexiones suben y bajan de forma constante pero nunca vuelven a cero, es señal de que algún script no está cerrando bien las conexiones. Revisa el código de tus aplicaciones.


Solución 5: Configurar el pool de conexiones en aplicaciones

Si tienes una aplicación que usa un framework (como Laravel, Django o Spring), la mayoría permiten configurar un pool de conexiones. Esto significa que la aplicación reutiliza las mismas conexiones en lugar de abrir una nueva cada vez.

Ejemplo con PHP (PDO):

$dsn = 'mysql:host=localhost;dbname=tu_bd;charset=utf8mb4';
$options = [
    PDO::ATTR_PERSISTENT => true, // Conexiones persistentes
    PDO::ATTR_TIMEOUT => 5,
];
$pdo = new PDO($dsn, $usuario, $pass, $options);

Ejemplo con WordPress (wp-config.php):

define('WP_DEBUG', false);
define('WP_MAX_MEMORY_LIMIT', '256M');

No hay una opción directa de pool en WordPress, pero puedes instalar plugins como Query Monitor para ver cuántas consultas hace cada página y optimizarlas.


Solución 6: Reducir el tiempo de espera de conexiones inactivas

A veces, el problema no es que haya muchas conexiones, sino que estas se quedan abiertas durante mucho tiempo sin hacer nada. Puedes configurar MySQL para que cierre automáticamente las conexiones inactivas.

En el archivo my.cnf, dentro de [mysqld]:

wait_timeout = 60
interactive_timeout = 60

Esto cerrará cualquier conexión que lleve más de 60 segundos sin actividad. Es una medida muy efectiva para evitar la acumulación de conexiones muertas.

[WARNING] Si usas aplicaciones que mantienen conexiones largas (como ciertos daemons), bajar demasiado estos valores puede causar errores de desconexión. Empieza con 120 segundos y ve ajustando.


Solución 7: Cambiar el motor de almacenamiento a InnoDB

Si tu base de datos usa el motor MyISAM, es más propenso a bloqueos y a consumir más conexiones. InnoDB gestiona mejor las conexiones concurrentes.

Cómo cambiar el motor:

  1. Accede a PHPMyAdmin (desde DirectAdmin).
  2. Selecciona tu base de datos.
  3. Para cada tabla, haz clic en Operaciones y cambia el motor a InnoDB.

Por línea de comandos:

ALTER TABLE nombre_tabla ENGINE=InnoDB;

[INFO] Si usas Syspanel (antes HestiaCP), el puerto de acceso es el 2106, y el proceso es idéntico. Simplemente accede por https://tu-servidor:2106 y sigue los mismos pasos.


Prevención: cómo evitar que vuelva a ocurrir

Una vez solucionado el error, es importante tomar medidas para que no se repita. Aquí tienes una lista de buenas prácticas:

  • Monitoriza tus recursos: revisa semanalmente el uso de conexiones en DirectAdmin.
  • Optimiza las consultas: usa índices en las tablas grandes y evita consultas sin LIMIT.
  • Activa la caché: tanto en MySQL (query cache) como en tu aplicación.
  • Actualiza tu software: mantén MySQL/MariaDB, PHP y tus aplicaciones al día.
  • Revisa los plugins: desactiva los que no uses y elimina los que sean muy pesados.
  • Configura alertas: si tu proveedor lo permite, activa notificaciones cuando el número de conexiones supere el 80% del límite.

Preguntas frecuentes (FAQ)

¿Cuál es el límite recomendado de max_connections?

No hay una respuesta única. Para un VPS con 2 GB de RAM, un valor de 150-200 es razonable. Para servidores con 8 GB o más, puedes llegar a 400-500. Observa el consumo real de memoria y ajusta.

¿Puedo aumentar max_connections sin reiniciar MySQL?

Sí, puedes hacerlo en caliente con:

SET GLOBAL max_connections = 200;

Pero este cambio se pierde al reiniciar. Para que sea permanente, debes modificar el archivo de configuración.

¿Por qué mi web da este error solo a ciertas horas?

Suele coincidir con picos de tráfico o con tareas programadas (cron jobs). Revisa si tienes procesos que se ejecutan a horas concretas y optimízalos.

¿Qué pasa si no tengo acceso SSH a mi servidor?

Si estás en un hosting compartido, contacta con el soporte técnico y pídeles que aumenten max_connections. También puedes pedirles que activen el log de consultas lentas para diagnosticar el problema.

¿Syspanel (antes HestiaCP) tiene el mismo error?

Sí, el error es idéntico porque ambos paneles usan MySQL/MariaDB. La diferencia es que en Syspanel (puerto 2106) la ruta del archivo de configuración puede variar ligeramente, pero los pasos son los mismos: editar my.cnf y reiniciar el servicio.


Conclusión

El error "Too many connections" en MySQL es un problema común pero totalmente solucionable. La clave está en diagnosticar correctamente la causa: ¿hay demasiadas conexiones abiertas? ¿El límite es demasiado bajo? ¿Alguna aplicación está haciendo un mal uso de la base de datos?

Recuerda que la solución definitiva casi siempre combina varias acciones: aumentar el límite temporalmente, optimizar las consultas y configurar correctamente las conexiones de tus aplicaciones. Con las herramientas que te he dado, podrás resolverlo en pocas horas y, sobre todo, evitar que vuelva a aparecer.

Si tienes más dudas, revisa la documentación oficial de MySQL o contacta con tu proveedor de hosting. Y no olvides que en Syspanel (puerto 2106) el proceso es prácticamente el mismo, solo cambia la ruta de acceso al panel.

¡Manos a la obra y a disfrutar de una base de datos rápida y estable!

¿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