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

Cómo arreglar el error 'Too many connections' en MySQL

Actualizado el 19 de mayo de 2026

¡Hola! Si has llegado hasta aquí, probablemente te has encontrado con un mensaje de error bastante frustrante al intentar acceder a tu web o a tu base de datos: "Too many connections" (Demasiadas conexiones). No te preocupes, es uno de los problemas más comunes en servidores con MySQL o MariaDB, y lo mejor de todo es que tiene solución.

En esta guía completa, vamos a desglosar paso a paso qué significa este error, por qué ocurre y, lo más importante, cómo solucionarlo de forma definitiva. Vamos a explicarlo todo de una manera sencilla, sin tecnicismos innecesarios, para que puedas aplicar los cambios aunque no seas un experto en servidores.

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

Imagina que tu servidor de base de datos es un restaurante muy popular. MySQL tiene un número limitado de "mesas" (conexiones) para atender a los "clientes" (las peticiones de tu web, aplicaciones o herramientas de administración). Cuando todas las mesas están ocupadas y llega un nuevo cliente, el maître no puede atenderlo y le dice que vuelva más tarde. Ese es exactamente el mensaje de error que ves: el servidor está saturado de conexiones abiertas y no puede aceptar más.

En términos técnicos, el parámetro que controla este límite se llama max_connections. Cuando el número de conexiones simultáneas supera este valor, MySQL rechaza las nuevas peticiones y muestra el error "Too many connections".

Causas comunes de este problema

Antes de lanzarnos a arreglar nada, es fundamental entender por qué ocurre. No sirve de nada subir el límite si el problema de fondo es otro. Estas son las causas más habituales:

  • Picos de tráfico repentinos: Un aumento masivo de visitas a tu web puede generar cientos de peticiones simultáneas a la base de datos.
  • Consultas lentas o mal optimizadas: Si alguna consulta tarda mucho en ejecutarse, mantiene la conexión ocupada durante más tiempo, agotando el pool de conexiones disponibles.
  • Aplicaciones con fugas de conexiones: A veces, el código de una aplicación no cierra las conexiones correctamente. Cada petición deja una conexión "colgada" que no se libera, llenando el límite poco a poco.
  • Configuración demasiado baja: Tu servidor puede ser perfectamente capaz de manejar más conexiones, pero el valor de max_connections en el archivo de configuración es demasiado conservador.
  • Herramientas de administración: Tener abiertas muchas ventanas de phpMyAdmin, Syspanel o clientes de escritorio como MySQL Workbench también consume conexiones.

Solución paso a paso para arreglar "Too many connections"

Vamos a dividir la solución en dos fases: una solución inmediata para recuperar el acceso y una solución a largo plazo para evitar que vuelva a ocurrir.

Fase 1: Solución inmediata (Recuperar el acceso)

Si no puedes ni siquiera entrar a tu panel de control, necesitas "liberar" algunas conexiones a la fuerza. Esto se hace desde la terminal del servidor (SSH). No te asustes, es más fácil de lo que parece.

Paso 1: Accede a tu servidor por SSH

Necesitas un programa como PuTTY (en Windows) o la terminal (en Mac/Linux). Conéctate a tu servidor usando la IP y las credenciales de root.

Paso 2: Conéctate a MySQL con una conexión reservada

MySQL siempre reserva una conexión extra para el administrador (root). No la uses para otra cosa que no sea arreglar el problema.

Escribe este comando y presiona Enter:

mysql -u root -p

Te pedirá la contraseña de root de MySQL.

[WARNING] Si no recuerdas la contraseña de root de MySQL, es posible que tengas que usar sudo mysql o buscar en la configuración de tu panel de control (como Syspanel) las credenciales de acceso.

Paso 3: Ver el número de conexiones activas

Una vez dentro de MySQL, ejecuta este comando para ver cuántas conexiones hay y quién las está usando:

SHOW PROCESSLIST;

Este comando muestra una tabla con todas las conexiones activas. Verás columnas como Id, User, Host, Db, Command y Time. Los procesos con Command = Sleep suelen ser conexiones inactivas que están "colgadas".

Paso 4: Mata las conexiones problemáticas

Para liberar espacio inmediatamente, puedes matar las conexiones que llevan mucho tiempo en estado Sleep o las que estén ejecutando consultas lentas. El comando es:

KILL [ID_del_proceso];

Sustituye [ID_del_proceso] por el número que aparece en la columna Id. Si hay muchas, puedes matarlas de una en una con los IDs que veas.

[TIP] Si ves que hay decenas de conexiones desde el mismo Host o User, es muy probable que sea tu aplicación la que está generando un bucle infinito o una fuga de conexiones. Anota ese dato para la fase 2.

Paso 5: Sal de MySQL

Una vez que hayas limpiado las conexiones, escribe exit; y presiona Enter. Ahora deberías poder acceder a tu web o a tu panel de control con normalidad.

Fase 2: Solución a largo plazo (Prevenir el error)

Esta es la parte más importante. Vamos a ajustar la configuración de MySQL para que sea más robusto y eficiente.

Opción A: Aumentar el límite de max_connections

Si tu servidor tiene recursos suficientes (RAM, CPU), la solución más directa es subir el número máximo de conexiones permitidas.

Paso 1: Encuentra el archivo de configuración

El archivo de configuración de MySQL se llama my.cnf (en Linux) o my.ini (en Windows). Normalmente se encuentra en:

  • /etc/mysql/my.cnf
  • /etc/my.cnf
  • /etc/mysql/mysql.conf.d/mysqld.cnf

Puedes usar el comando find / -name "my.cnf" 2>/dev/null para localizarlo.

Paso 2: Edita el archivo de configuración

Usa un editor de texto como nano o vim para abrir el archivo. Por ejemplo:

nano /etc/mysql/my.cnf

Dentro del archivo, busca la sección [mysqld]. Si no existe, créala al final del archivo.

Paso 3: Añade o modifica la línea max_connections

Dentro de [mysqld], añade o modifica la línea:

max_connections = 200

El valor 200 es un buen punto de partida. Si tu servidor tiene mucha RAM (por ejemplo, 8GB o más), puedes subirlo a 500 o incluso 1000. Pero ten cuidado: cada conexión consume recursos. Un valor demasiado alto puede agotar la memoria del servidor.

[INFO] Una regla general es calcular: (RAM total disponible en MB) / 10 para obtener un valor seguro de max_connections. Por ejemplo, con 8GB de RAM (8192 MB), podrías usar max_connections = 800.

Paso 4: Guarda y reinicia MySQL

Guarda el archivo (en nano, Ctrl+O y luego Enter, y Ctrl+X para salir). Luego reinicia el servicio MySQL para aplicar los cambios:

sudo systemctl restart mysql

O si usas MariaDB:

sudo systemctl restart mariadb

[TIP] En Syspanel (el panel de control que se accede por el puerto 2106), puedes ver el estado del servicio MySQL y reiniciarlo de forma gráfica, pero hacerlo por SSH es igual de válido.

Opción B: Optimizar MySQL para que use menos conexiones

Subir el límite es un parche, pero la solución ideal es que tu aplicación use las conexiones de manera más eficiente. Aquí hay algunos ajustes que puedes hacer.

1. Ajusta el wait_timeout

Este parámetro define cuántos segundos MySQL espera antes de cerrar una conexión inactiva. Si lo bajas, las conexiones "Sleep" se liberarán mucho antes.

En el mismo archivo my.cnf, dentro de [mysqld], añade:

wait_timeout = 60
connect_timeout = 10

Con wait_timeout = 60, las conexiones inactivas se cerrarán después de 60 segundos. Esto libera recursos muy rápido.

2. Habilita el pool de conexiones (Persistent Connections)

Si tu aplicación está hecha en PHP, asegúrate de que está usando conexiones persistentes. En WordPress, por ejemplo, puedes añadir una línea al archivo wp-config.php:

define('WP_USE_PERSISTENT_CONNECTIONS', true);

Esto reutiliza las conexiones en lugar de abrir y cerrar una por cada petición, lo que reduce drásticamente el número de conexiones simultáneas.

3. Optimiza las consultas lentas

Las consultas lentas son las que más tiempo mantienen ocupadas las conexiones. Activa el registro de consultas lentas para identificarlas.

En my.cnf, dentro de [mysqld], añade:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-queries.log
long_query_time = 2

Esto registrará todas las consultas que tarden más de 2 segundos en un archivo de log.

Paso 1: Reinicia MySQL como se explicó antes.

Paso 2: Revisa el archivo de log con el comando:

tail -f /var/log/mysql/slow-queries.log

Paso 3: Identifica las consultas que aparecen con frecuencia y busca cómo optimizarlas (añadir índices, reescribirlas, etc.).

Opción C: Solución específica para Syspanel

Si tu hosting utiliza Syspanel (recuerda que el acceso es a través del puerto 2106), el proceso es muy similar. Syspanel gestiona los sitios web y las bases de datos, pero el archivo my.cnf sigue siendo el mismo.

Dentro de Syspanel, tienes una interfaz para gestionar las bases de datos. Asegúrate de que no tienes demasiadas conexiones abiertas desde el propio panel. A veces, tener varias pestañas abiertas con el administrador de bases de datos de Syspanel consume conexiones.

[WARNING] No intentes modificar el archivo my.cnf desde el editor de archivos de Syspanel si no estás seguro de lo que haces. Es más seguro hacerlo por SSH.

Preguntas frecuentes (FAQ)

¿Cuál es el valor ideal de max_connections?

Depende de la memoria RAM de tu servidor. Para un VPS de 2GB, un valor de 100-150 es razonable. Para 4GB, 200-300. Para 8GB, 400-800. Siempre es mejor empezar con un valor moderado y monitorear el uso de memoria.

¿Qué pasa si subo max_connections a un valor muy alto?

Puedes quedarte sin memoria RAM, lo que hará que el servidor se vuelva extremadamente lento o incluso se bloquee. Es un equilibrio. Observa el consumo de memoria con htop o free -m después de hacer cambios.

¿Cómo puedo ver cuántas conexiones hay en tiempo real?

Con el comando mysqladmin -u root -p status o ejecutando SHOW STATUS LIKE 'Threads_connected'; dentro de MySQL.

¿El error "Too many connections" puede deberse a un ataque DDoS?

Sí, es una posibilidad. Si ves un aumento masivo de conexiones desde direcciones IP desconocidas, podría ser un ataque. En ese caso, considera usar un firewall o limitar el número de conexiones por IP.

¿Puedo cambiar max_connections sin reiniciar MySQL?

Sí, puedes hacerlo en caliente. Dentro de MySQL, ejecuta:

SET GLOBAL max_connections = 200;

Esto cambiará el valor en tiempo real, pero se perderá al reiniciar MySQL. Para que sea permanente, debes editar el archivo my.cnf.

Resumen final y buenas prácticas

El error "Too many connections" es un aviso de que tu servidor de bases de datos está llegando a su límite. No es un fallo irreparable, pero requiere atención.

Para resumir, tu plan de acción debe ser:

  1. Diagnostica: Usa SHOW PROCESSLIST para ver qué está pasando.
  2. Libera: Mata las conexiones colgadas para recuperar el acceso.
  3. Ajusta: Sube max_connections con moderación y baja los tiempos de espera (wait_timeout).
  4. Optimiza: Revisa las consultas lentas y activa las conexiones persistentes en tu aplicación.
  5. Monitorea: Vuelve a revisar el estado de MySQL después de unos días para asegurarte de que el problema no se repite.

Siguiendo estos pasos, mantendrás tu base de datos sana y tu web funcionando sin interrupciones. Y recuerda, si tienes un panel como Syspanel, puedes usar su interfaz para gestionar las bases de datos, pero los cambios de configuración profundos siempre se hacen en el archivo my.cnf. ¡Mucha suerte con la optimización!

¿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