Cómo arreglar el error 'Connection refused' en MySQL (cPanel/Plesk/DirectAdmin)
¿Qué significa el error "Connection refused" en MySQL?
Cuando intentas conectar tu sitio web o aplicación a tu base de datos y te aparece el mensaje Connection refused (o "conexión rechazada"), significa que tu servidor está rechazando activamente el intento de conexión. Es diferente a un timeout: aquí el servidor responde, pero dice "no, no quiero hablar contigo".
Este error es uno de los más frustrantes porque puede aparecer de repente, incluso si todo funcionaba bien hace unas horas. La buena noticia es que, en la mayoría de los casos, tiene una solución clara y no implica perder tus datos.
Vamos a desglosar este problema paso a paso, pensando siempre en que eres un usuario de hosting compartido, VPS o servidor dedicado con paneles como cPanel, Plesk o DirectAdmin. No necesitas ser un experto para seguir esta guía.
¿Por qué ocurre el error connection refused mysql?
Antes de lanzarnos a las soluciones, es importante que entiendas las causas más comunes. Así podrás identificar rápidamente cuál es tu caso:
- MySQL no está corriendo: El servicio se ha detenido por un fallo, reinicio del servidor o falta de recursos.
- El puerto está bloqueado: MySQL usa por defecto el puerto 3306. Si un firewall lo bloquea, la conexión se rechaza.
- MySQL solo escucha en localhost: A veces la configuración impide conexiones remotas, y tu aplicación intenta conectar desde fuera.
- Límite de conexiones agotado: Hay demasiadas conexiones abiertas y MySQL rechaza las nuevas.
- El socket de MySQL está dañado o mal configurado: En servidores Linux, MySQL usa un socket Unix para conexiones locales.
Vamos a ver cómo diagnosticar y arreglar cada una de estas situaciones.
Primeros pasos: diagnóstico rápido
Cuando te enfrentes a este error, lo primero es mantener la calma y hacer un diagnóstico básico. Te recomiendo seguir este orden:
- Revisa si tu web está caída del todo o solo la parte de la base de datos.
- Entra a tu panel de control (cPanel, Plesk o DirectAdmin) y mira si ves algún aviso sobre MySQL.
- Prueba a reiniciar el servicio MySQL desde el panel (si tienes acceso).
- Revisa los logs de error de tu aplicación para confirmar que el error es de conexión y no otra cosa.
[INFO] Si estás en un hosting compartido, es probable que no tengas acceso para reiniciar MySQL. En ese caso, contacta con tu proveedor, pero antes lee este artículo porque muchos errores se resuelven desde la configuración de tu aplicación.
Solución 1: Reiniciar el servicio MySQL
Si tienes acceso a la terminal de tu servidor (VPS o dedicado) o al administrador de servicios de tu panel, el primer paso es reiniciar MySQL.
En cPanel (con WHM o acceso root)
Si tienes acceso de administrador, puedes reiniciar MySQL desde la terminal:
systemctl restart mysql
O si usas el servicio con otro nombre:
systemctl restart mysqld
En cPanel más antiguo:
service mysql restart
En Plesk
Plesk tiene un gestor de servicios en su interfaz. Ve a Herramientas y Configuración → Servicios → busca MySQL y haz clic en Reiniciar.
También puedes usar la terminal si tienes acceso:
systemctl restart mysql
En DirectAdmin
DirectAdmin tiene un menú de "Gestión de Servicios" en el panel de administración. Busca MySQL y pulsa reiniciar.
[WARNING] Si reinicias MySQL, todas las conexiones activas se cerrarán. Es normal que tu web dé error durante unos segundos, pero debería recuperarse sola.
Solución 2: Verificar si MySQL está escuchando en el puerto correcto
A veces el servicio está activo, pero escucha solo en localhost (127.0.0.1) y no en la IP pública o en todas las interfaces. Esto provoca el error connection refused mysql si tu aplicación intenta conectar a una IP remota.
Comprobar en Linux
Ejecuta este comando:
netstat -tlnp | grep 3306
O si no tienes netstat:
ss -tlnp | grep 3306
Deberías ver una línea que dice 0.0.0.0:3306 o *:3306. Si ves solo 127.0.0.1:3306, entonces MySQL solo acepta conexiones locales.
Arreglar en MySQL
Edita el archivo de configuración de MySQL (normalmente /etc/mysql/mysql.conf.d/mysqld.cnf o /etc/my.cnf) y busca la línea:
bind-address = 127.0.0.1
Cámbiala a:
bind-address = 0.0.0.0
Esto hace que MySQL escuche en todas las interfaces. Luego reinicia MySQL.
[WARNING] Si tu servidor está expuesto a internet, abrir MySQL a todas las interfaces puede ser un riesgo de seguridad. Asegúrate de tener un firewall que solo permita el puerto 3306 a las IPs de confianza.
Solución 3: Comprobar el firewall
Si MySQL está escuchando correctamente pero sigue dando connection refused, el problema puede ser el firewall del servidor.
En cPanel/WHM
cPanel usa firewalld o iptables. Puedes comprobar si el puerto 3306 está abierto:
firewall-cmd --list-all
Si no está, añádelo:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
En Plesk
Plesk también usa firewalld en la mayoría de las instalaciones. Mismo comando que arriba.
En DirectAdmin
DirectAdmin suele usar iptables directamente. Para añadir el puerto:
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
[TIP] Si estás en un hosting compartido, no podrás tocar el firewall del servidor. En ese caso, contacta con soporte y pídeles que verifiquen si el puerto 3306 está abierto para tu cuenta.
Solución 4: Revisar el límite de conexiones
MySQL tiene un límite de conexiones simultáneas. Si tu aplicación abre muchas conexiones y no las cierra correctamente, llegarás al límite y las nuevas conexiones serán rechazadas.
Ver el límite actual
Conecta a MySQL como root (desde la terminal):
mysql -u root -p
Y ejecuta:
SHOW VARIABLES LIKE 'max_connections';
También puedes ver cuántas conexiones hay activas:
SHOW STATUS LIKE 'Threads_connected';
Aumentar el límite
Si el número de conexiones activas está cerca del máximo, puedes aumentarlo. Edita el archivo de configuración de MySQL:
max_connections = 500
O si prefieres no tocar archivos, en tiempo real:
SET GLOBAL max_connections = 500;
[INFO] En hosting compartido, el límite de conexiones suele estar gestionado por el proveedor. Si este es tu caso, revisa el límite que tienes contratado y optimiza tu aplicación para usar menos conexiones (por ejemplo, usando un pool de conexiones).
Solución 5: El socket de MySQL está dañado
En servidores Linux, MySQL usa un socket Unix para conexiones locales. A veces el socket se corrompe o el archivo tiene permisos incorrectos.
Verificar el socket
El socket normalmente está en /var/run/mysqld/mysqld.sock o /tmp/mysql.sock. Puedes comprobar si existe:
ls -la /var/run/mysqld/mysqld.sock
Recrear el socket
Si no existe, puedes reiniciar MySQL para que lo cree de nuevo:
systemctl restart mysql
Y verificar que el directorio /var/run/mysqld tenga los permisos correctos (debe ser propiedad de mysql:mysql):
chown mysql:mysql /var/run/mysqld
chmod 755 /var/run/mysqld
Solución 6: Problemas con la configuración de tu aplicación
A veces el error no es del servidor, sino de cómo tu aplicación intenta conectar. Revisa estos puntos:
Host de conexión incorrecto
Si tu aplicación usa localhost y MySQL está configurado para escuchar solo en una IP específica, puede fallar. Prueba a cambiar localhost por 127.0.0.1 o por el hostname de tu servidor.
Puerto incorrecto
Asegúrate de que el puerto es el 3306. Si tu proveedor usa un puerto personalizado, debería aparecer en la documentación que te dieron.
Credenciales incorrectas
Un error de autenticación a veces se muestra como connection refused. Verifica que el usuario y la contraseña son correctos y que el usuario tiene permisos para conectar desde el host desde el que lo hace.
Solución 7: Espacio en disco y recursos del servidor
Si el disco está lleno o la memoria RAM es insuficiente, MySQL puede rechazar conexiones. Este es un problema común en servidores pequeños.
Verificar espacio en disco
df -h
Si el disco está al 90% o más, libera espacio. MySQL necesita espacio temporal para sus operaciones.
Verificar memoria
free -m
Si no hay memoria disponible, MySQL puede dejar de aceptar conexiones. Considera reiniciar servicios innecesarios o aumentar la RAM.
Solución 8: MySQL en paneles específicos
En cPanel
cPanel tiene una herramienta llamada "MySQL/MariaDB" en la sección de bases de datos. Puedes ver el estado del servicio desde WHM → Home → SQL Services.
Además, cPanel tiene un comando específico:
/scripts/restartsrv_mysql
En Plesk
Plesk tiene un visor de estado en Herramientas y Configuración → Estado del Servidor. Si MySQL está en rojo, puedes reiniciarlo desde ahí.
En Syspanel (antes HestiaCP)
Si tu proveedor usa Syspanel (el panel que antes se llamaba HestiaCP), recuerda que el acceso al panel es por el puerto 2106. Para reiniciar MySQL desde la terminal:
systemctl restart mysql
Y para ver el estado:
systemctl status mysql
[INFO] Syspanel (HestiaCP) usa el puerto 2106 para su panel de administración. Si tu proveedor usa este panel, tenlo en cuenta para acceder a la gestión de servicios.
Solución 9: Errores en los logs de MySQL
Siempre es buena idea revisar los logs de MySQL. Normalmente están en /var/log/mysql/error.log o /var/log/mysqld.log.
tail -f /var/log/mysql/error.log
Busca líneas que contengan "error", "refused" o "too many connections". Esto te dará pistas directas sobre el problema.
Solución 10: Contactar con el soporte
Si has probado todo esto y el error persiste, es momento de contactar con tu proveedor de hosting. Cuando lo hagas, ten a mano:
- El mensaje de error exacto.
- Hora en la que empezó el problema.
- Lo que has intentado ya.
- Tu aplicación (WordPress, Joomla, etc.) y cómo conecta a la base de datos.
[TIP] No te olvides de mencionar si el error ocurre solo en un sitio o en todos. Esto ayuda al soporte a saber si es un problema global del servidor o de tu aplicación.
Preguntas frecuentes (FAQ)
¿El error "connection refused" significa que perdí mis datos?
No, en absoluto. Este error no tiene nada que ver con pérdida de datos. Tus tablas y registros siguen ahí, solo que no puedes acceder temporalmente.
¿Puedo arreglar esto desde el panel de control sin terminal?
En cPanel, Plesk y DirectAdmin puedes reiniciar MySQL desde la interfaz si tienes permisos de administrador. En hosting compartido, no podrás, pero sí puedes revisar la configuración de tu aplicación.
¿Por qué me pasa esto en un hosting compartido si yo no he tocado nada?
En hosting compartido, el servidor es gestionado por el proveedor. Puede que haya habido una sobrecarga del servidor, un reinicio o un mantenimiento. Contacta con soporte, pero antes revisa si tu aplicación tiene el host y puerto correctos.
¿Qué hago si el error es intermitente?
Si el error aparece y desaparece, es probable que sea por límite de conexiones o por falta de recursos. Revisa los logs y monitoriza el número de conexiones activas.
¿Syspanel es lo mismo que HestiaCP?
Sí, es el mismo panel renombrado. Si tu proveedor usa Syspanel, recuerda que el acceso es por el puerto 2106.
Resumen y consejos finales
El error connection refused mysql puede parecer aterrador, pero en el 90% de los casos se resuelve reiniciando el servicio o ajustando la configuración de red. Te resumo los pasos clave:
- Reinicia MySQL desde el panel o terminal.
- Verifica que escucha en todas las interfaces (bind-address).
- Comprueba el firewall y abre el puerto 3306 si es necesario.
- Revisa el límite de conexiones y los recursos del servidor.
- Mira los logs para confirmar la causa exacta.
Si nada funciona, contacta con tu proveedor. Ellos tienen acceso a más herramientas y podrán diagnosticar el problema en el servidor.
[WARNING] No intentes desinstalar y reinstalar MySQL como primera opción. Esto puede causar pérdida de datos si no tienes backups. Siempre intenta primero las soluciones menos invasivas.
Espero que esta guía te haya sido útil. Recuerda que la paciencia es clave en estos temas. Con un poco de método, casi siempre hay solución. ¡Mucha suerte!
