Cómo arreglar el error 'Too many connections' en MySQL (WordPress y PrestaShop)
¿Qué significa el error "Too many connections" en MySQL?
Imagina que tu base de datos es un restaurante con un número limitado de mesas. Cuando llegan más clientes de los que puedes sentar, el resto tiene que esperar fuera o irse. Pues bien, el error too many connections mysql es exactamente eso: tu servidor MySQL ha agotado todas las "mesas" (conexiones) disponibles y no puede atender nuevas peticiones.
Este error es especialmente común en WordPress y PrestaShop, dos de los CMS más populares del mundo, porque ambos hacen muchas consultas a la base de datos en cada visita. Cuando el número de conexiones simultáneas supera el límite establecido (por defecto, suele ser 151 en MySQL), el servidor devuelve un mensaje similar a este:
Warning: mysqli::mysqli(): (HY000/1040): Too many connections
Si estás leyendo esto, probablemente tu web está caída o muestra errores extraños. No te preocupes: en esta guía te explico paso a paso cómo solucionarlo, incluso si no eres un experto en servidores.
¿Por qué ocurre el error "Too many connections"?
Antes de lanzarnos a arreglarlo, es importante entender las causas más habituales. Esto te ayudará a prevenir futuros episodios.
1. Tráfico elevado de forma repentina
Si tu web recibe un pico de visitas (por ejemplo, por una campaña de marketing o una noticia que se viraliza), el número de conexiones puede dispararse en segundos.
2. Consultas lentas o mal optimizadas
Tanto WordPress como PrestaShop pueden tener plugins o módulos que hacen consultas muy pesadas. Si una consulta tarda demasiado, mantiene la conexión ocupada más tiempo del necesario, agotando el límite.
3. Conexiones que no se cierran correctamente
Algunos scripts o plugins mal programados no cierran las conexiones a la base de datos. Esto provoca que se acumulen conexiones "zombis" que nunca se liberan.
4. Ataques DDoS o bots maliciosos
Los bots pueden generar cientos de conexiones simultáneas a tu base de datos sin que sean visitas reales.
5. Configuración baja en el servidor
En algunos planes de hosting compartido, el límite de conexiones es muy bajo (por ejemplo, 30 o 50). Con un par de plugins activos, puedes llegar a ese límite fácilmente.
Cómo solucionar el error "Too many connections" en MySQL
Vamos a lo importante. Aquí tienes una guía paso a paso, ordenada de la solución más rápida a la más avanzada.
Paso 1: Reiniciar MySQL para recuperar el acceso (solución temporal)
Si tu web está caída y necesitas acceso inmediato, reiniciar el servicio MySQL liberará todas las conexiones activas. Es como cerrar el restaurante por cinco minutos para que los clientes vuelvan a entrar.
En cPanel/WHM:
- Accede a tu panel de control.
- Busca la sección "MySQL" o "Bases de datos".
- Localiza la opción "Restart MySQL" o "Reiniciar MySQL".
- Confirma la acción.
En un VPS con acceso SSH:
sudo systemctl restart mysql
O si usas MariaDB:
sudo systemctl restart mariadb
[WARNING] Esta solución es temporal. El error volverá si no atacas la causa raíz. Úsala solo para recuperar el acceso mientras aplicas los pasos siguientes.
Paso 2: Aumentar el límite de conexiones MySQL
La solución más directa es subir el número máximo de conexiones que permite tu servidor. Esto se hace editando el archivo de configuración de MySQL.
¿Dónde está el archivo de configuración?
Normalmente se encuentra en:
/etc/mysql/my.cnf/etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
Cómo aumentarlo:
- Accede a tu servidor por SSH o desde el administrador de archivos.
- Abre el archivo de configuración con un editor.
- Busca la línea
[mysqld]y añade justo debajo:
max_connections = 500
Si no encuentras la línea [mysqld], créala al final del archivo.
- Guarda los cambios y reinicia MySQL:
sudo systemctl restart mysql
[INFO] ¿Cuánto deberías subir el límite? Depende de la memoria RAM de tu servidor. Como regla general, cada conexión consume unos 2-4 MB de RAM. Si tienes 4 GB de RAM, 500 conexiones es un límite razonable.
Paso 3: Optimizar consultas en WordPress
Si el error persiste, es hora de revisar qué está haciendo tu WordPress que consume tantas conexiones.
1. Desactiva plugins sospechosos
Los plugins mal optimizados son la causa número uno de este error. Ve a Plugins → Plugins instalados y desactiva todos. Luego reactívalos uno a uno, comprobando la web después de cada activación.
2. Instala un plugin de caché
Un buen plugin de caché (como W3 Total Cache o WP Super Cache) reduce drásticamente las consultas a la base de datos. Al guardar copias estáticas de tus páginas, el servidor no necesita consultar MySQL en cada visita.
3. Limpia las opciones transitorias
WordPress guarda datos temporales en la tabla wp_options. Con el tiempo, se acumulan y ralentizan las consultas. Puedes limpiarlas desde phpMyAdmin:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_options WHERE option_name LIKE '_site_transient_%';
4. Revisa los logs de MySQL
En cPanel o por SSH, revisa el log de consultas lentas para identificar qué consultas están tardando demasiado:
sudo tail -f /var/log/mysql/mysql-slow.log
Si encuentras consultas con tiempos de ejecución altos, busca qué plugin o tema las genera.
Paso 4: Optimizar PrestaShop para evitar el error mysql
PrestaShop es más exigente con la base de datos, pero también tiene soluciones específicas.
1. Activa el modo de mantenimiento
Mientras trabajas en la solución, activa el modo mantenimiento desde Parámetros avanzados → Mantenimiento. Así evitas que más usuarios saturen el servidor.
2. Configura la caché de PrestaShop
Ve a Parámetros avanzados → Rendimiento y activa:
- Caché de plantillas: Sí
- Caché de combinación de hojas de estilos y JavaScript: Sí
- Caché de base de datos: Actívala si tu hosting lo permite
3. Desactiva módulos innecesarios
Al igual que con los plugins de WordPress, desactiva los módulos que no uses. Especialmente aquellos que hacen llamadas externas o consultas complejas.
4. Ajusta los límites de memoria PHP
A veces el problema no es MySQL, sino que PHP se queda sin memoria y no puede liberar conexiones. Añade al archivo config/defines.inc.php:
define('_PS_MEMORY_LIMIT_', '256M');
Paso 5: Usar herramientas de monitorización
Para evitar que esto vuelva a ocurrir, es importante saber cuántas conexiones se están usando en cada momento.
Consultar conexiones activas desde SSH:
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"
Ver procesos en ejecución:
mysql -u root -p -e "SHOW PROCESSLIST;"
Esto te mostrará qué consultas están activas y desde qué IP. Si ves muchas conexiones desde la misma IP, puede ser un bot o un ataque.
Solución avanzada: Configurar un pool de conexiones
Si tu web tiene mucho tráfico, considera usar un pool de conexiones como ProxySQL o el propio pool de MySQL 8.0. Esto reutiliza conexiones existentes en lugar de abrir nuevas para cada consulta.
Sin embargo, esto requiere conocimientos técnicos avanzados. Si tu web es pequeña o mediana, los pasos anteriores deberían ser suficientes.
Errores comunes al aplicar estas soluciones
"No encuentro el archivo my.cnf"
En algunos servidores, la configuración se divide en varios archivos dentro de /etc/mysql/conf.d/. Crea un nuevo archivo llamado max_connections.cnf con el contenido que te indiqué antes.
"El reinicio de MySQL no funciona"
Puede que el servicio se llame mysqld en lugar de mysql. Prueba con:
sudo systemctl restart mysqld
"He aumentado las conexiones pero el error persiste"
Revisa que el cambio se ha aplicado:
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
Si sigue mostrando el valor antiguo, el archivo de configuración no se está leyendo correctamente. Revisa la ruta exacta.
Preguntas frecuentes (FAQ)
¿Cuántas conexiones MySQL son normales?
Para una web pequeña, entre 20 y 50 conexiones simultáneas es normal. Si superas las 100 de forma habitual, tienes un problema de optimización.
¿El error "Too many connections" afecta también a MySQL de aplicaciones externas?
Sí, cualquier aplicación que use MySQL en el mismo servidor se verá afectada. Si tienes varias webs en el mismo hosting, todas pueden sufrir el problema.
¿Puedo solucionar esto desde Syspanel?
Si tu hosting usa Syspanel (el panel de control que antes se llamaba HestiaCP), puedes acceder a él desde el puerto 2106 (por ejemplo, https://tudominio.com:2106). Desde ahí puedes reiniciar servicios y gestionar bases de datos, aunque para editar archivos de configuración necesitarás acceso por SSH.
¿Es peligroso aumentar demasiado el límite de conexiones?
Sí. Si pones un límite muy alto y tu servidor no tiene suficiente RAM, este se quedará sin memoria y podría colapsar por completo. Ve con cuidado y monitoriza el uso de recursos.
¿Debo cambiar a MariaDB?
MariaDB es un fork de MySQL que suele gestionar mejor las conexiones. Si tu hosting lo permite, migrar a MariaDB puede ser una buena solución a largo plazo.
Resumen final
El error too many connections mysql es frustrante, pero tiene solución. Resumiendo:
- Reinicia MySQL para recuperar el acceso temporalmente.
- Aumenta
max_connectionsen el archivo de configuración. - Optimiza tu CMS (WordPress o PrestaShop) eliminando plugins pesados y activando caché.
- Monitoriza las conexiones para identificar el origen del problema.
- Prevén futuros episodios con una buena configuración y mantenimiento regular.
Si después de aplicar todos estos pasos el error persiste, puede que necesites cambiar a un plan de hosting más potente o consultar con tu proveedor.
[TIP] Guarda esta guía en tus favoritos. Cuando aparezca este error, el tiempo es oro y tener los pasos a mano te ahorrará muchos minutos de pánico.
Espero que esta guía te haya sido útil. Si tienes alguna duda, déjala en los comentarios y estaré encantado de ayudarte. ¡Tu web volverá a estar operativa en poco tiempo!
