Solucionar error 'Too many connections' en MySQL para WordPress y PrestaShop
¿Qué significa el error "Too many connections" en MySQL?
Si estás leyendo esto, probablemente te has encontrado con un mensaje parecido a este en tu tienda online o web: Error establishing a database connection o, directamente, Too many connections. No te preocupes, es uno de los errores más comunes en hosting compartido y también en servidores dedicados, y tiene solución.
El error too many connections mysql ocurre cuando el número de conexiones simultáneas a tu base de datos supera el límite máximo permitido por el servidor MySQL. Piensa en ello como un restaurante con un número limitado de mesas: si llegan más clientes que mesas disponibles, los nuevos tienen que esperar fuera o irse. En este caso, WordPress y PrestaShop son los "clientes" que intentan acceder a la base de datos, y si hay una avalancha de peticiones (bots, plugins mal configurados, procesos lentos), el servidor colapsa.
El límite por defecto en muchos servidores es de 150 conexiones simultáneas, pero en hosting compartido puede ser mucho menor (a veces 30 o 50). Cuando tu web recibe un pico de tráfico o un plugin hace consultas ineficientes, ese límite se alcanza rápidamente y el servidor rechaza nuevas conexiones, mostrando el temido error.
Causas más comunes del error de conexiones MySQL
Antes de lanzarte a tocar configuraciones, es importante entender por qué ocurre. Estas son las causas más habituales:
- Picos de tráfico repentinos: Una campaña de marketing, un artículo viral o incluso un ataque DDoS pueden saturar el límite de conexiones.
- Consultas lentas o mal optimizadas: Plugins de caché mal configurados, consultas sin índices o temas que hacen demasiadas llamadas a la base de datos.
- Conexiones que no se cierran correctamente: Algunos scripts o plugins dejan conexiones "abiertas" en segundo plano.
- El límite
max_connectionses demasiado bajo en tu plan de hosting. - Procesos en estado
Sleepacumulados: Conexiones inactivas que permanecen abiertas sin hacer nada, consumiendo recursos. - Uso de plugins de caché que no funcionan bien: En WordPress, por ejemplo, un plugin de caché mal configurado puede generar cientos de conexiones simultáneas.
Solucionar too many connections: primeros pasos inmediatos
Si tu web está caída ahora mismo, necesitas actuar rápido. Estas son las soluciones más directas y que no requieren conocimientos avanzados.
1. Reiniciar el servicio MySQL (si tienes acceso root)
Si tienes acceso SSH o un panel como Syspanel (recuerda, el puerto de acceso es el 2106), puedes reiniciar el servicio MySQL para liberar todas las conexiones de golpe. Es como apagar el restaurante y volver a abrir: las mesas se liberan.
sudo systemctl restart mysql
O si usas otro gestor:
sudo service mysql restart
Importante: Esto es una solución temporal. Si el problema es crónico, volverá a ocurrir en minutos u horas.
2. Aumentar el límite de max_connections desde el panel
La mayoría de paneles de control como cPanel, Plesk o Syspanel permiten ajustar este valor sin tocar archivos de configuración.
En cPanel:
- Ve a "MySQL" o "Remote MySQL" (depende de la versión).
- Busca la opción "max_connections" o "Maximum Connections".
- Auméntalo a un valor razonable (por ejemplo, 200 o 300 si tu plan lo permite).
En Syspanel (HestiaCP renombrado):
- Accede a Syspanel a través del puerto 2106 (ejemplo:
https://tu-dominio.com:2106). - Ve a la sección de "Bases de datos" o "Servidor".
- Busca la configuración de MySQL y ajusta el parámetro
max_connections.
[WARNING] No subas el límite a valores extremos como 1000 si tu servidor tiene poca RAM. Cada conexión consume memoria, y podrías provocar un fallo mayor. Ve con calma: sube de 150 a 250, por ejemplo.
3. Identificar y matar procesos lentos
Si tienes acceso a phpMyAdmin o a la línea de comandos, puedes ver qué procesos están consumiendo conexiones.
SHOW PROCESSLIST;
Esta consulta te muestra todas las conexiones activas. Busca columnas con State = Sleep o Query que lleven mucho tiempo. Puedes matar un proceso específico con:
KILL [ID_del_proceso];
Si ves muchos procesos en Sleep, es que hay aplicaciones que no cierran conexiones correctamente.
Soluciones a largo plazo para WordPress y PrestaShop
El reinicio y el aumento del límite son parches. Ahora vamos a la raíz del problema para que solucionar too many connections sea definitivo.
Optimizar WordPress para reducir conexiones
1. Instala un plugin de caché eficiente
Un buen plugin de caché (como W3 Total Cache, WP Super Cache o LiteSpeed Cache) reduce drásticamente las consultas a la base de datos. En lugar de consultar MySQL en cada visita, el plugin genera archivos HTML estáticos.
2. Usa un plugin de optimización de base de datos
Plugins como WP-Optimize o Advanced Database Cleaner eliminan transients, revisiones antiguas y datos basura que hacen que las consultas sean más lentas y pesadas.
3. Limita los "cron jobs" de WordPress
WordPress ejecuta tareas programadas (cron) que abren conexiones a la base de datos. Si tienes muchos plugins que usan cron, el número de conexiones se dispara.
Puedes desactivar el cron de WordPress y usar un cron real del sistema:
define('DISABLE_WP_CRON', true);
Y en el servidor (cPanel o Syspanel) configuras un cron que ejecute wp-cron.php cada 5 minutos.
4. Revisa los plugins que hacen consultas pesadas
Algunos plugins de estadísticas, contadores de visitas o widgets de redes sociales hacen consultas constantes. Si tienes muchos, considera desactivarlos o usar alternativas más ligeras.
Optimizar PrestaShop para evitar el error mysql conexiones
PrestaShop es más pesado que WordPress en cuanto a base de datos, así que hay que poner especial atención.
1. Activa la caché de PrestaShop
En el panel de administración: Parámetros avanzados → Rendimiento. Activa la caché y usa el sistema de caché combinada (CCC) para CSS y JavaScript. Esto reduce peticiones y, por tanto, conexiones a MySQL.
2. Configura correctamente el "Persistent connections"
En Parámetros avanzados → Base de datos, verás una opción para "Conexiones persistentes". Si tu hosting no lo soporta bien, déjala desactivada. Las conexiones persistentes pueden provocar el error mysql conexiones si no se gestionan bien.
3. Limpia la tabla de sesiones
PrestaShop guarda las sesiones de los usuarios en la base de datos. Si tienes muchos visitantes, esta tabla crece rápidamente y ralentiza todo. Activa la limpieza automática en Parámetros avanzados → Rendimiento → Limpiar sesiones.
4. Usa un módulo de caché de base de datos
Módulos como "Cache MySQL" o "Query Cache" almacenan los resultados de las consultas más comunes, reduciendo la carga.
Ajustes avanzados en MySQL: max_connections y más
Si tienes acceso root al servidor, puedes ajustar la configuración de MySQL directamente. El archivo de configuración suele estar en /etc/mysql/my.cnf o /etc/my.cnf.
Cambiar max_connections en el archivo de configuración
Busca la línea [mysqld] y añade o modifica:
max_connections = 300
También puedes ajustar otros parámetros que ayudan a prevenir el error:
wait_timeout: Tiempo que MySQL espera antes de cerrar una conexión inactiva. Redúcelo a 60 segundos.interactive_timeout: Similar al anterior, pero para conexiones interactivas. Ponlo también a 60.thread_cache_size: Número de hilos que se guardan en caché para reutilizarlos. Un valor de 16 o 32 es bueno.
[TIP] Después de cambiar la configuración, reinicia MySQL:
sudo systemctl restart mysql.
Crear un script de monitorización
Para evitar sorpresas, puedes crear un script que vigile el número de conexiones y te avise por email si se acerca al límite.
#!/bin/bash
CONEXIONES=$(mysql -u root -pTU_CLAVE -e "SHOW STATUS LIKE 'Threads_connected';" | awk '{print $2}' | tail -1)
LIMITE=250
if [ $CONEXIONES -gt $LIMITE ]; then
echo "Alerta: $CONEXIONES conexiones activas" | mail -s "MySQL connections alert" tu@email.com
fi
Puedes programarlo con cron cada 5 minutos.
Cómo prevenir el error "too many connections mysql" en el futuro
La prevención es la mejor estrategia. Estas son las mejores prácticas:
1. Elige un buen plan de hosting
Si estás en hosting compartido y sufres este error con frecuencia, es señal de que tu plan es insuficiente. Considera migrar a un VPS o un hosting gestionado con mejores recursos.
2. Usa una capa de caché externa
Servicios como Redis o Varnish pueden reducir drásticamente la carga en MySQL. En WordPress puedes usar Redis Object Cache; en PrestaShop, módulos como Redis Cache.
3. Limita el acceso de bots
Los bots de rastreo pueden generar cientos de conexiones. Configura el archivo robots.txt y usa herramientas como Cloudflare para bloquear bots maliciosos.
4. Realiza mantenimientos periódicos
- Optimiza las tablas de MySQL regularmente (puedes hacerlo desde phpMyAdmin con
OPTIMIZE TABLE). - Revisa los logs de errores de MySQL para detectar consultas problemáticas.
- Actualiza WordPress, PrestaShop, plugins y temas a las últimas versiones.
5. Configura un sistema de alertas
La mayoría de paneles (cPanel, Syspanel) tienen opciones de monitorización. Actívalas para recibir avisos cuando el uso de recursos supere un umbral.
Preguntas frecuentes (FAQ)
¿Cuántas conexiones MySQL son normales?
Depende del tráfico. Para una web pequeña, 20-50 conexiones es normal. Para una tienda con tráfico medio, 100-200. Si superas las 200, necesitas optimizar o ampliar recursos.
¿El error "Too many connections" puede dañar mi base de datos?
No directamente. El servidor simplemente rechaza nuevas conexiones. Sin embargo, si el problema persiste, puede provocar pérdida de datos en transacciones incompletas.
¿Puedo aumentar max_connections desde cPanel?
Sí, en la mayoría de versiones de cPanel puedes hacerlo desde MySQL → Max Connections, aunque el valor máximo dependerá de tu plan.
¿Por qué mi web da este error aunque tengo poco tráfico?
Puede ser por un plugin mal configurado, consultas que se quedan "colgadas" o un ataque de fuerza bruta. Revisa el SHOW PROCESSLIST; para identificar el origen.
¿Es mejor usar conexiones persistentes en MySQL?
No siempre. Las conexiones persistentes reutilizan conexiones, lo que puede reducir el número total. Pero si no se configuran bien, pueden provocar el error. En general, es mejor dejarlas desactivadas en hosting compartido.
Conclusión
El error too many connections mysql es un problema serio pero totalmente solucionable. La clave está en combinar soluciones inmediatas (reiniciar, aumentar el límite, matar procesos) con soluciones a largo plazo (optimización, caché, monitorización).
Recuerda que cada servidor es diferente, así que no tengas miedo de experimentar con los valores de max_connections y wait_timeout hasta encontrar el equilibrio perfecto. Y si no te sientes seguro haciendo cambios avanzados, siempre puedes contactar con tu proveedor de hosting o un técnico especializado.
Con estas estrategias, tu WordPress o PrestaShop volverá a volar, y el error será solo un mal recuerdo. ¡Manos a la obra!
