
📅 Publicado el 5 de septiembre, 2026 · Por Equipo RedServicio
Cuando tu aplicación muestra un error connection timed out MySQL, significa que el servidor web intentó comunicarse con el motor de base de datos pero no recibió respuesta dentro del tiempo permitido. De los fallos que puede sufrir un webmaster, este es de los más irritantes. ¿Por qué? Porque aparece de golpe, muchas veces sin haber tocado absolutamente nada. Aquí te explico cómo diagnosticarlo y qué solución aplica en cada caso.
¿Qué significa exactamente el error connection timed out en MySQL?
En pocas palabras: la conexión TCP/IP entre tu aplicación y el servidor MySQL se agotó antes de completarse. Ojo, no es lo mismo que «Access Denied» (credenciales incorrectas) ni que «Connection Refused» (el servicio está caído o el puerto cerrado). El timeout indica otra cosa. El servidor existe, probablemente está vivo, pero tardó demasiado en responder o algo bloqueó el tráfico por el camino.
Las causas típicas:
- Sobrecarga del servidor MySQL (consultas lentas, falta de RAM).
- Firewalls o reglas de seguridad bloqueando el puerto 3306.
- DNS lento o mal resuelto en el nombre de host de la base de datos.
- Límite de conexiones agotado (max_connections alcanzado).
- Valores de timeout demasiado bajos en la configuración.
- Problemas de red entre el servidor web y el servidor de base de datos.
Diagnóstico inicial: paso a paso
1. Verifica que MySQL esté en ejecución
Conéctate por SSH a tu servidor y ejecuta:
systemctl status mysql
¿El servicio está detenido? Reinícialo:
sudo systemctl restart mysql
Y revisa el log de errores, normalmente en /var/log/mysql/error.log. Ahí suele haber pistas: cierres inesperados, corrupción de tablas, cosas así.
2. Comprueba la conectividad con telnet o nc
Desde el servidor web, prueba si el puerto responde:
telnet 127.0.0.1 3306
o
nc -zv tu-servidor.com 3306
La distinción importa. Si la conexión se cuelga sin respuesta, el problema suele estar en el firewall o en reglas de red. Si responde pero lentísimo, el problema es de rendimiento del propio MySQL.
3. Revisa los valores de timeout en MySQL
Conéctate a MySQL (localmente) y consulta:
SHOW VARIABLES LIKE '%timeout%';
Los parámetros que más te interesan:
- connect_timeout: los segundos que MySQL espera durante el handshake. Si está por debajo de 10, subirlo a 30 puede resolver timeouts intermitentes.
- wait_timeout: cuánto tiempo se mantiene abierta una conexión inactiva. El valor por defecto, 28800 (8 horas), suele bastar. Pero ojo con las aplicaciones que usan pooling propio: estas sí deben ajustarlo.
- net_read_timeout y net_write_timeout: críticos cuando hay redes lentas entre servidores.
Principales soluciones al error connection timed out MySQL
Aumentar connect_timeout
Edita el archivo de configuración (normalmente /etc/mysql/my.cnf o /etc/mysql/mysql.conf.d/mysqld.cnf):
[mysqld]
connect_timeout = 30
Guarda, reinicia el servicio. Con esto basta cuando el servidor está ocupado y tarda en atender nuevas conexiones.
Verificar el firewall y las reglas de red
Si tu base de datos vive en un servidor remoto, asegúrate de que el puerto 3306 esté abierto solo para las IPs necesarias:
sudo ufw allow from 203.0.113.10 to any port 3306
¿Trabajas con AWS, Google Cloud o Azure? Revisa los security groups o las reglas de firewall del proveedor. He visto más de un caso donde un cambio reciente ahí era el culpable.
Usar 127.0.0.1 en lugar de localhost (y viceversa)
Un detalle que sorprende hasta a gente con experiencia: localhost en MySQL suele usar sockets de Unix, mientras que 127.0.0.1 fuerza TCP/IP. Si el socket está mal configurado, cambiar tu archivo de conexión:
$conn = new mysqli("127.0.0.1", "usuario", "contraseña", "basedatos");
puede resolver el problema al saltarse el socket conflictivo. Prueba también con la IP del servidor en vez del hostname, para descartar fallos de DNS.
Aliviar la sobrecarga del servidor
Ejecuta esto para ver qué está consumiendo recursos:
SHOW FULL PROCESSLIST;
Consultas en estado «Sending data» o «Locked» durante mucho tiempo están bloqueando a las demás. Activa el slow query log para identificarlas:
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;
Luego toca optimizar: índices adecuados, revisar el buffer pool de InnoDB (en servidores dedicados debería ocupar entre el 50% y el 70% de la RAM) y, si hace falta, caché a nivel de aplicación con Redis o Memcached para quitar carga.
Revisar max_connections
Si tu aplicación no cierra conexiones correctamente (fuga de conexiones), MySQL acabará agotando su límite:
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
Puedes subir el límite sobre la marcha con SET GLOBAL max_connections = 300;. Pero seamos honestos: eso es un parche. La solución real pasa por corregir el código para cerrar conexiones o usar connection pooling.
mysql -u usuario -p -h host. ¿Funciona por consola pero no desde tu aplicación? Entonces el problema está en el código o en el timeout del cliente (por ejemplo, mysqli.connect_timeout en PHP), no en MySQL.Errores relacionados que no debes confundir
- 2002 «Connection refused»: el servicio no está corriendo o el socket no existe.
- 1045 «Access denied»: usuario o contraseña incorrectos.
- 1040 «Too many connections»: límite de conexiones agotado. Relacionado, pero distinto.
- «MySQL server has gone away»: la conexión se cerró a mitad de una consulta, normalmente por wait_timeout o paquetes demasiado grandes (max_allowed_packet).
Cómo prevenir este error en el futuro
- Implementa reintentos automáticos con backoff en tu capa de conexión.
- Monitoriza el servidor con herramientas como mysqltuner, Netdata o las métricas de tu panel de control.
- Mantén MySQL actualizado y revisa los logs semanalmente. Cuesta poco y evita sustos.
- Usa un hosting con monitoreo proactivo y soporte técnico disponible cuando el problema aparezca fuera de horario (que aparecerá, créeme).
En RedServicio nuestros planes de hosting incluyen monitoreo continuo de bases de datos y soporte 24/7, de modo que un error como este se detecta y resuelve antes de que afecte a tus visitantes.
¿Cuánto debe ser el connect_timeout ideal? Entre 10 y 30 segundos es razonable. No lo pongas altísimo solo para «que deje de fallar»: valores muy altos enmascaran problemas de rendimiento reales.
¿Este error puede deberse a mi proveedor de hosting? Sí, especialmente si el servidor MySQL está saturado o hubo mantenimiento no anunciado. Si tu diagnóstico local no revela nada, consulta el estado del servicio con tu proveedor.
¿Reiniciar MySQL soluciona el problema? Solo temporalmente. Si el error reaparece, hay una causa de fondo: consultas sin optimizar, falta de recursos o configuración inadecuada.
Conclusión
El error connection timed out MySQL casi siempre tiene una causa identificable: firewall, valores de timeout, sobrecarga del servidor o problemas de red. Sigue el diagnóstico en orden —verificar el servicio, probar la conectividad, revisar los timeouts, aliviar la carga— y en pocos minutos habrás localizado el problema y aplicado la solución definitiva. Y si prefieres no lidiar con estos sustos, un hosting de calidad marca la diferencia: en RedServicio tienes infraestructura optimizada para MySQL y un equipo de soporte disponible 24/7, a cualquier hora.
Equipo RedServicio
Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.
¿Listo para un hosting de verdad?
Servidores en España · Soporte 24/7 en español · Migración gratuita
Ver Planes desde 3,95€/mes →