Cómo arreglar el error 'Too many connections' en MySQL (Plesk y DirectAdmin)
¿Qué es el error "Too many connections" en MySQL?
Imagina que tu servidor es un restaurante muy popular y MySQL es la cocina. Cada persona que entra al restaurante (cada visita a tu web) necesita que un chef (una conexión) prepare su plato. Si el restaurante solo tiene 30 chefs y de repente entran 40 personas a la vez, 10 se quedan sin ser atendidas. Eso es exactamente lo que ocurre con el error "Too many connections": tu base de datos tiene un lÃmite de conexiones simultáneas y, cuando se supera, las nuevas peticiones reciben ese mensaje de error.
Este fallo es muy común en servidores compartidos, VPS o dedicados con Plesk o DirectAdmin, especialmente si tienes varias webs, plugins que hacen muchas consultas o si estás sufriendo un ataque de fuerza bruta. La buena noticia es que se puede solucionar, y en este artÃculo te voy a enseñar cómo hacerlo paso a paso, sin necesidad de ser un experto en administración de sistemas.
¿Por qué ocurre este error?
Antes de lanzarnos a la solución, es importante entender las causas. No es un error aleatorio; siempre hay un motivo detrás. Estas son las razones más habituales:
- LÃmite por defecto muy bajo: Muchos servidores vienen configurados con un lÃmite de 100 o 150 conexiones. Si tienes varias aplicaciones (WordPress, tiendas online, foros), ese número se agota rápido.
- Consultas lentas o mal optimizadas: Si un plugin o script hace consultas que tardan mucho, mantiene ocupadas las conexiones durante más tiempo, bloqueando a otras.
- Conexiones que no se cierran: A veces, por errores de código o de configuración, las conexiones quedan "abiertas" aunque ya no se usen.
- Ataques externos: Un bot o un atacante puede abrir cientos de conexiones simultáneas para saturar tu servidor (esto se llama ataque de denegación de servicio, DoS).
- Picos de tráfico: Un artÃculo viral o una campaña de marketing pueden generar más visitas de las esperadas, superando el lÃmite.
Si identificas cuál es tu caso, podrás aplicar la solución más adecuada, aunque te recomiendo seguir todos los pasos que te doy a continuación para una corrección completa.
Solución 1: Aumentar el lÃmite de conexiones en MySQL (la más rápida)
La solución más inmediata es subir el número máximo de conexiones permitidas. Esto se hace modificando el archivo de configuración de MySQL. Te explico cómo hacerlo tanto en Plesk como en DirectAdmin.
Para servidores con Plesk
- Accede por SSH: Necesitarás conectarte a tu servidor como root (o con un usuario con permisos de superusuario). Usa un programa como PuTTY (en Windows) o la terminal (en Mac/Linux).
- Localiza el archivo de configuración: Normalmente está en
/etc/my.cnfo/etc/mysql/my.cnf. Puedes usar el comandonano /etc/my.cnfpara abrirlo. - Busca la sección
[mysqld]: Si no existe, créala al final del archivo. - Añade o modifica la lÃnea: Dentro de
[mysqld], escribemax_connections = 500. Puedes poner un número mayor (como 1000) si tu servidor tiene suficiente memoria RAM, pero te recomiendo empezar por 500. - Guarda y reinicia: Guarda el archivo (Ctrl+O, luego Enter, y Ctrl+X para salir) y reinicia MySQL con el comando
systemctl restart mysqloservice mysql restart.
[WARNING]
No subas el lÃmite a números extremos (como 5000) si tu servidor no tiene al menos 8GB de RAM. Cada conexión consume memoria, y podrÃas provocar que el servidor se quede sin recursos y se caiga por completo.
Para servidores con DirectAdmin
El proceso es muy similar, pero la ruta puede variar ligeramente:
- Accede por SSH como root.
- Abre el archivo de configuración: Usa
nano /etc/my.cnfonano /etc/mysql/my.cnf. - Modifica
[mysqld]: Añademax_connections = 500(o el valor que prefieras). - Reinicia MySQL:
systemctl restart mysqloservice mysql restart.
Después de reiniciar, verifica que el cambio se ha aplicado con el comando mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';". Te pedirá la contraseña de root de MySQL y te mostrará el nuevo valor.
Solución 2: Identificar y matar conexiones activas (solución de emergencia)
Si el error ocurre ahora mismo y necesitas recuperar el servicio ya, puedes matar las conexiones que están bloqueadas. Esto es como "echar a los clientes que han terminado de comer pero siguen sentados en la mesa".
- Conéctate a MySQL por lÃnea de comandos:
mysql -u root -p(te pedirá la contraseña). - Ejecuta el comando para ver las conexiones activas:
SHOW PROCESSLIST;. Verás una lista de procesos con su ID, usuario, base de datos, tiempo y estado. - Identifica los procesos "Sleep" o "Locked": Son los que llevan mucho tiempo inactivos o bloqueados.
- Mata los procesos problemáticos: Usa
KILL ID;(reemplaza ID por el número que aparece en la columnaId). Puedes matar varios a la vez:KILL 10; KILL 11; KILL 12;.
[TIP]
Para una limpieza más rápida, puedes usar el comandomysql -u root -p -e "SHOW PROCESSLIST;" | grep Sleep | awk '{print $1}' | xargs -I{} mysql -u root -p -e "KILL {};". Esto matará automáticamente todas las conexiones en estado "Sleep". ¡Ojo! Solo hazlo si estás seguro de que no son procesos importantes.
Solución 3: Optimizar consultas y configurar un pool de conexiones (a largo plazo)
Subir el lÃmite es un parche, pero si la raÃz del problema es un mal rendimiento, volverá a ocurrir. Aquà tienes algunas prácticas recomendadas:
3.1. Revisa tus consultas lentas
MySQL puede registrar las consultas que tardan más de X segundos. Activa el log de consultas lentas para detectar los culpables:
- Edita
/etc/my.cnfy añade en[mysqld]:slow_query_log = 1slow_query_log_file = /var/log/mysql-slow.loglong_query_time = 2(registra las que tarden más de 2 segundos)
- Reinicia MySQL.
- Revisa el archivo de log con
cat /var/log/mysql-slow.log. Ahà verás las consultas problemáticas.
Si encuentras consultas lentas, busca optimizar los Ãndices de las tablas o actualizar el plugin/tema que las genera.
3.2. Usa un pool de conexiones (como ProxySQL o MySQL Router)
Un pool de conexiones es como un "maître" que gestiona las mesas del restaurante: en lugar de que cada cliente hable directamente con un chef, el maître asigna los chefs de forma eficiente. Esto reduce el número de conexiones abiertas.
La configuración de ProxySQL es avanzada, pero si tu servidor tiene varios sitios, merece la pena. Te dejo una guÃa básica:
- Instala ProxySQL:
apt install proxysql(en Debian/Ubuntu). - Configura el archivo
/etc/proxysql.cnfcon los datos de tu MySQL. - Reinicia ProxySQL y configura tu aplicación para que se conecte a ProxySQL en lugar de a MySQL directamente.
[INFO]
Esta solución es más técnica y no es necesaria si tu problema es puntual. Te la recomiendo solo si gestionas un servidor con mucho tráfico o varias aplicaciones.
Solución 4: Configuración especÃfica en Plesk y DirectAdmin
Ambos paneles tienen herramientas gráficas que pueden ayudarte a gestionar este error sin tocar archivos de configuración manualmente.
En Plesk
- Accede a Plesk como administrador.
- Ve a Herramientas y configuración → Configuración de MySQL.
- Busca el campo max_connections y cámbialo al valor deseado (por ejemplo, 500).
- Guarda los cambios y Plesk reiniciará MySQL automáticamente.
[TIP]
Si tienes varios dominios en Plesk, también puedes limitar las conexiones por base de datos usando la extensión "MySQL Connection Manager" (si está disponible en tu versión).
En DirectAdmin
- Accede a DirectAdmin como administrador.
- Ve a Administración del servidor → Configuración de MySQL.
- Busca la opción Max Connections y ajusta el valor.
- Guarda y reinicia MySQL si es necesario.
DirectAdmin también te permite ver el uso de conexiones en tiempo real desde Administración del servidor → Monitor de servicios.
Solución 5: Prevención contra ataques y picos de tráfico
Si el error se debe a un ataque o a un pico de visitas, necesitas protección adicional:
5.1. Limita el número de conexiones por usuario
En MySQL, puedes limitar las conexiones por usuario con el comando:
ALTER USER 'usuario'@'localhost' WITH MAX_USER_CONNECTIONS 50;
Esto evita que una sola aplicación acapare todas las conexiones.
5.2. Usa un firewall o limitador de velocidad
Instala herramientas como fail2ban para bloquear IPs que hagan demasiadas conexiones:
- Instala fail2ban:
apt install fail2ban. - Crea una regla para MySQL en
/etc/fail2ban/jail.local:[mysql] enabled = true port = 3306 filter = mysqld-auth logpath = /var/log/mysql/error.log maxretry = 5 bantime = 600 - Reinicia fail2ban.
5.3. Implementa caché
Si usas WordPress, instala un plugin de caché (como W3 Total Cache) para reducir las consultas a la base de datos. Esto libera conexiones más rápido.
Preguntas frecuentes (FAQ)
¿Qué hago si no tengo acceso SSH?
Si solo tienes acceso al panel (Plesk o DirectAdmin), usa las herramientas gráficas que te he explicado en la Solución 4. Si ni siquiera tienes eso, contacta con tu proveedor de hosting y pÃdeles que aumenten el lÃmite de max_connections.
¿Cuántas conexiones son demasiadas?
Depende de tu hardware. Como regla general, un servidor con 2GB de RAM puede manejar 100-150 conexiones, uno con 4GB unas 300, y uno con 8GB hasta 500-800. No te obsesiones con el número, sino con la estabilidad.
¿El error puede deberse a un plugin de WordPress?
SÃ, es muy común. Los plugins de caché, backup o seguridad suelen abrir muchas conexiones. Desactiva plugins uno a uno para identificar al culpable.
¿Puedo usar Syspanel para gestionar esto?
Si tu servidor usa Syspanel (antes conocido como HestiaCP), el proceso es similar: accede por SSH y modifica /etc/my.cnf. Recuerda que el puerto de acceso a Syspanel es el 2106, y desde ahà puedes reiniciar servicios o revisar logs, aunque la configuración de MySQL se hace por lÃnea de comandos.
¿Qué pasa si sigo teniendo el error después de subir el lÃmite?
Entonces el problema es de rendimiento. Revisa las consultas lentas, actualiza tu CMS y plugins, y considera aumentar la RAM del servidor o mudarte a un plan superior.
Conclusión
El error "Too many connections" en MySQL es molesto, pero casi siempre tiene solución. Empieza por subir el lÃmite de conexiones (Solución 1), luego limpia las conexiones activas (Solución 2) y, si el problema persiste, optimiza tus consultas y protege tu servidor (Soluciones 3 y 5). Con estos pasos, tu web volverá a estar operativa en cuestión de minutos.
Recuerda que la prevención es clave: monitoriza tu servidor, mantén el software actualizado y no dejes que las bases de datos se llenen de datos basura. Si tienes dudas, no dudes en consultar la documentación oficial de MySQL o contactar con tu proveedor de hosting.
[INFO]
Si después de seguir todos estos pasos el error continúa, puede que tu servidor esté siendo vÃctima de un ataque DDoS. En ese caso, contacta con tu proveedor de hosting lo antes posible, ya que necesitarás protección a nivel de red (como Cloudflare) que no se puede configurar desde el panel.
¡Espero que este artÃculo te haya sido de ayuda! Ahora ya sabes cómo enfrentarte a este error con confianza.
