Cómo solucionar el error 'Too many connections' en MySQL de DirectAdmin
Si has llegado hasta aquí, es porque probablemente tu sitio web está mostrando un error similar a "Warning: mysqli_connect(): (08004/1040): Too many connections", o directamente la página se queda en blanco. No te preocupes, es un problema común en servidores con DirectAdmin y tiene solución.
Este error significa que tu servidor MySQL (o MariaDB) ha alcanzado el límite máximo de conexiones simultáneas permitidas. Cada vez que tu web, un plugin, un script o un usuario accede a la base de datos, abre una conexión. Si se abren demasiadas a la vez, el servidor se satura y rechaza nuevas peticiones.
En este artículo, te explicaré paso a paso cómo solucionar el error "Too many connections" en MySQL dentro de DirectAdmin, desde las soluciones más rápidas (para recuperar el acceso) hasta los ajustes permanentes para que no vuelva a ocurrir.
¿Qué causa el error "Too many connections"?
Antes de lanzarnos a la solución, es útil entender por qué ocurre. Las causas más frecuentes son:
- Un pico de tráfico repentino: Muchos visitantes simultáneos abren muchas conexiones a la vez.
- Plugins o scripts mal optimizados: Por ejemplo, un plugin de WooCommerce que no cierra las conexiones correctamente.
- Consultas lentas: Una consulta que tarda mucho en ejecutarse mantiene la conexión abierta durante más tiempo.
- Ataques DDoS o bots: Tráfico malicioso que satura la base de datos.
- Límite muy bajo configurado: El valor por defecto de
max_connectionsen algunos servidores es de solo 150 o incluso 100.
[INFO] El límite predeterminado de conexiones en MySQL suele ser 150, pero en servidores compartidos o VPS pequeños puede ser mucho menor.
Solución rápida: Aumentar temporalmente el límite desde SSH
Si tienes acceso SSH a tu servidor y el error es urgente, puedes aumentar el límite de conexiones al vuelo. Esto te permitirá acceder al panel de DirectAdmin o a phpMyAdmin para hacer cambios más profundos.
Paso 1: Conéctate por SSH
Accede a tu servidor con un usuario con permisos de root o sudo.
Paso 2: Conéctate a MySQL con un usuario privilegiado
Ejecuta:
mysql -u root -p
Te pedirá la contraseña de root de MySQL (no la de DirectAdmin). Si no la recuerdas, puedes encontrarla en el archivo /usr/local/directadmin/conf/mysql.conf o en el panel de DirectAdmin en "Administración de MySQL".
Paso 3: Aumenta el límite temporalmente
Dentro de MySQL, ejecuta:
SET GLOBAL max_connections = 500;
Esto cambiará el límite a 500 conexiones hasta el próximo reinicio de MySQL. Si el error persiste, puedes subirlo a 1000.
Paso 4: Verifica el cambio
Ejecuta:
SHOW VARIABLES LIKE 'max_connections';
Deberías ver el nuevo valor.
[TIP] Este cambio es temporal. Al reiniciar MySQL, volverá al valor por defecto del archivo de configuración. Para hacerlo permanente, sigue los pasos de la siguiente sección.
Solución permanente: Modificar el archivo my.cnf en DirectAdmin
Para que el cambio sea permanente, debes editar el archivo de configuración de MySQL (my.cnf o my.ini). En DirectAdmin, la ruta habitual es /etc/my.cnf o /etc/mysql/my.cnf.
Paso 1: Accede al archivo de configuración
Conéctate por SSH y abre el archivo con un editor como nano:
nano /etc/my.cnf
Si no existe, puede estar en /etc/mysql/my.cnf. También puedes crearlo si es necesario.
Paso 2: Busca o añade la directiva max_connections
Dentro del archivo, busca la sección [mysqld]. Si no está, créala al final. Luego añade o modifica la línea:
[mysqld]
max_connections = 500
Puedes cambiar 500 por el valor que mejor se adapte a tu servidor. Un valor seguro para un VPS pequeño es 250-300, y para servidores más potentes, 1000 o más.
Paso 3: Guarda y reinicia MySQL
Guarda el archivo (Ctrl+O, luego Ctrl+X en nano) y reinicia el servicio:
systemctl restart mysql
o si usas MariaDB:
systemctl restart mariadb
[WARNING] No subas el límite a valores extremos (ej. 5000) sin verificar la memoria RAM de tu servidor. Cada conexión consume unos 10 MB de RAM. Si tienes 4 GB de RAM, 500 conexiones son un límite razonable.
Solución desde DirectAdmin (sin SSH)
Si no tienes acceso SSH, aún puedes solucionarlo desde el propio panel de DirectAdmin.
Paso 1: Accede a phpMyAdmin
Desde DirectAdmin, ve a "Administración de MySQL" y luego haz clic en "phpMyAdmin". Si el error te impide entrar, prueba a conectarte desde la línea de comandos de phpMyAdmin (a veces permite una conexión aunque el límite esté cerca).
Paso 2: Aumenta el límite desde la interfaz SQL
En phpMyAdmin, haz clic en la pestaña "SQL" y ejecuta:
SET GLOBAL max_connections = 500;
Esto es temporal, pero te dará tiempo para editar el archivo de configuración si tienes acceso al sistema de archivos.
Paso 3: Edita el archivo de configuración desde el administrador de archivos
En DirectAdmin, ve a "Administrador de Archivos" y navega hasta /etc/my.cnf o /etc/mysql/my.cnf. Si no ves el archivo, activa la opción "Mostrar archivos ocultos". Edita el archivo y añade la línea max_connections = 500 en la sección [mysqld]. Guarda los cambios.
[INFO] Algunos servidores con DirectAdmin usan MariaDB en lugar de MySQL. El proceso es idéntico, solo cambia el nombre del servicio al reiniciar.
¿Cómo saber cuántas conexiones estás usando?
Para diagnosticar mejor, puedes consultar el número actual de conexiones activas y el límite configurado.
Desde MySQL:
SHOW STATUS LIKE 'Threads_connected';
Te mostrará las conexiones activas en ese momento.
SHOW VARIABLES LIKE 'max_connections';
Te muestra el límite.
Desde DirectAdmin:
En "Administración de MySQL" a veces hay un apartado de "Estadísticas" que muestra el uso de conexiones.
[TIP] Si ves que
Threads_connectedestá siempre cerca demax_connections, es señal de que necesitas aumentar el límite o optimizar tus aplicaciones.
Soluciones adicionales si el error persiste
Si después de aumentar el límite sigues teniendo problemas, puede que el origen sea otro. Aquí tienes algunas acciones adicionales:
1. Identifica las consultas lentas
Activa el log de consultas lentas en my.cnf:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
Luego revisa el log para ver qué consultas están tardando demasiado y optimízalas.
2. Limita el número de conexiones por usuario
Puedes establecer un límite por usuario de MySQL para evitar que una sola web acapare todas las conexiones:
ALTER USER 'usuario'@'localhost' WITH MAX_USER_CONNECTIONS 50;
Esto limita a 50 conexiones simultáneas para ese usuario.
3. Usa un plugin de caché
Si tu sitio usa WordPress, instala un plugin de caché como W3 Total Cache o WP Super Cache. Reducen las peticiones a la base de datos.
4. Revisa los logs de errores
En DirectAdmin, ve a "Logs" y revisa el log de errores de MySQL (normalmente en /var/log/mysql/error.log). Busca líneas que digan "Too many connections" o "aborted connections".
[WARNING] Si el error aparece justo después de instalar un plugin o modificar un tema, desactívalo temporalmente. Puede ser el culpable.
Preguntas frecuentes (FAQ)
¿Puedo solucionar el error sin reiniciar MySQL?
Sí, usando el comando SQL SET GLOBAL max_connections = 500; no requiere reinicio, pero el cambio es temporal hasta que MySQL se reinicie.
¿Cuántas conexiones debería configurar?
Depende de tu RAM. Una regla general: max_connections = (RAM total en MB / 10) * 0.8. Por ejemplo, para 4 GB de RAM: (4096 / 10) * 0.8 ≈ 327 conexiones.
¿El error afecta a todos los sitios de mi DirectAdmin?
Sí, porque el límite es global para toda la instancia de MySQL. Si un sitio satura las conexiones, todos los demás se ven afectados.
¿Puedo evitar que esto vuelva a ocurrir?
Sí, además de aumentar el límite, te recomiendo:
- Monitorizar el uso de conexiones con herramientas como
htopomytop. - Usar un sistema de colas (como Redis o RabbitMQ) para peticiones pesadas.
- Mantener actualizados los plugins y scripts.
- Contratar un hosting con más recursos si el tráfico es muy alto.
Conclusión
El error "Too many connections" en MySQL dentro de DirectAdmin es frustrante, pero con los pasos que te he dado podrás solucionarlo en pocos minutos. Recuerda que la solución temporal desde la línea de comandos te sacará del apuro, pero la solución permanente editando el my.cnf evitará que el problema se repita.
Si después de todo esto el error continúa, puede que tu servidor necesite más recursos o que tengas un ataque DDoS. En ese caso, contacta con tu proveedor de hosting o considera migrar a un VPS con más RAM.
Espero que este artículo te haya sido de ayuda. ¡No dudes en dejar tus dudas en los comentarios!
