🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo solucionar el error 'Connection refused' en MySQL

Actualizado el 28 de abril de 2026

¿Te has encontrado con el temido mensaje "Connection refused" al intentar conectar con tu base de datos MySQL? No te preocupes, es uno de los errores más comunes y, por suerte, casi siempre tiene una solución clara y sencilla. En esta guía extensa y paso a paso, vamos a desglosar las causas más frecuentes y te enseñaremos cómo solucionarlo, incluso si no eres un experto en servidores.

Vamos a empezar por lo básico: entender qué significa exactamente este error. Cuando tu aplicación o herramienta (como phpMyAdmin, WordPress o un script personalizado) intenta hablar con MySQL y recibe un "Connection refused", es como si llamaras a la puerta de una casa y nadie te abriera porque la casa está vacía, la puerta está cerrada con llave o estás llamando a la dirección equivocada. Es decir, el servidor de MySQL no está escuchando en el puerto y la dirección que esperas.


¿Por qué aparece el error "Connection refused" en MySQL?

Antes de lanzarnos a las soluciones, es importante conocer las causas más habituales. Así podrás identificar rápidamente por dónde empezar a revisar.

Causa 1: El servicio MySQL no está en ejecución

Esta es la causa más sencilla y la primera que debes comprobar. Si el servicio de MySQL no está corriendo, el servidor simplemente no responde a ninguna conexión.

Causa 2: MySQL está escuchando solo en localhost (127.0.0.1)

Por seguridad, MySQL suele configurarse para aceptar conexiones solo desde el mismo equipo (localhost). Si intentas conectar desde otro servidor o desde un cliente remoto, recibirás el error.

Causa 3: Puerto incorrecto o bloqueado

El puerto por defecto de MySQL es el 3306. Si tu conexión intenta usar otro puerto, o si un firewall (como iptables o ufw) está bloqueando ese puerto, la conexión será rechazada.

Causa 4: El archivo de configuración (my.cnf) está mal configurado

En ocasiones, una línea mal escrita en el archivo my.cnf (o my.ini en Windows) puede hacer que MySQL ignore ciertas interfaces o puertos.

Causa 5: Problemas con los permisos de usuario en MySQL

Aunque el servidor esté funcionando, si el usuario con el que intentas conectar no tiene permisos para hacerlo desde esa IP o si la contraseña es incorrecta, MySQL puede responder con un "Connection refused" o un "Access denied".


Paso 1: Verificar que el servicio MySQL está activo

Lo primero es asegurarte de que MySQL está en funcionamiento. Dependiendo de tu sistema operativo y panel de control, los comandos varían.

En sistemas Linux (Ubuntu, Debian, CentOS)

Abre una terminal y ejecuta:

sudo systemctl status mysql

O si usas MariaDB (un fork de MySQL muy común):

sudo systemctl status mariadb

Si ves un mensaje que dice "active (running)", genial. Si ves "inactive (dead)" o "failed", significa que el servicio no está corriendo.

[INFO] En muchos servidores gestionados con Syspanel (antes conocido como HestiaCP, cuyo panel de administración se accede por el puerto 2106), puedes comprobar el estado de los servicios desde la interfaz web, en la sección de "Servicios" o "Estado del servidor".

Cómo iniciar el servicio

Si está detenido, puedes iniciarlo con:

sudo systemctl start mysql

Y para que se inicie automáticamente al arrancar el sistema:

sudo systemctl enable mysql

En Windows (usando XAMPP, WAMP o similar)

Si usas un paquete como XAMPP, abre el Panel de Control y asegúrate de que el módulo MySQL tenga un check verde. Si está rojo, haz clic en "Start".


Paso 2: Comprobar en qué dirección y puerto escucha MySQL

A veces el servicio está activo, pero solo escucha en 127.0.0.1 (localhost). Para verificarlo, ejecuta:

sudo netstat -tlnp | grep 3306

O si tu sistema no tiene netstat, usa ss:

sudo ss -tlnp | grep 3306

El resultado debería mostrar algo como:

tcp   LISTEN  0  70  127.0.0.1:3306  0.0.0.0:*   users:(("mysqld",pid=1234,fd=20))

Si ves 127.0.0.1:3306, significa que solo acepta conexiones locales. Si ves 0.0.0.0:3306 o ::3306, está abierto a todas las interfaces (lo que permite conexiones remotas).

¿Cómo cambiar la dirección de escucha?

Edita el archivo de configuración de MySQL. Normalmente está en /etc/mysql/my.cnf o /etc/my.cnf. Busca la línea:

bind-address = 127.0.0.1

Cámbiala por:

bind-address = 0.0.0.0

O si quieres permitir solo una IP específica, pon esa IP.

[WARNING] Permitir conexiones desde 0.0.0.0 expone tu base de datos a toda la red. Asegúrate de tener un firewall configurado y contraseñas seguras.

Después de modificar, reinicia MySQL:

sudo systemctl restart mysql

Paso 3: Revisar el firewall del servidor

Incluso si MySQL está escuchando en todas las interfaces, un firewall puede estar bloqueando el puerto 3306.

En Linux con UFW (Ubuntu/Debian)

sudo ufw status

Si ves que el puerto 3306 no está permitido, añádelo:

sudo ufw allow 3306/tcp

En Linux con firewalld (CentOS/RHEL)

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

En servidores con Syspanel (HestiaCP)

Desde el panel (accediendo por https://tu-dominio-o-ip:2106), puedes ir a la sección de "Firewall" y añadir una regla para el puerto 3306 o para el servicio MySQL.

[TIP] Si estás en un entorno local (como tu propio ordenador con XAMPP), el firewall de Windows o macOS también puede bloquear el puerto. Revisa la configuración de seguridad.


Paso 4: Verificar la configuración del usuario en MySQL

A veces el servidor está bien, pero el usuario con el que intentas conectar no tiene permisos para hacerlo desde la IP desde la que te conectas.

Conéctate a MySQL desde la terminal local (en el servidor)

sudo mysql -u root -p

Luego, ejecuta:

SELECT user, host FROM mysql.user;

Verás una lista de usuarios y desde qué hosts pueden conectar. Por ejemplo, si tu usuario admin solo aparece con host = 'localhost', no podrá conectar desde una IP remota.

Cómo otorgar permisos a un usuario para conexiones remotas

Para permitir que un usuario llamado admin se conecte desde cualquier IP:

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'tu_contraseña_segura' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Si quieres permitir solo desde una IP específica (por ejemplo, 192.168.1.100):

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.100' IDENTIFIED BY 'tu_contraseña_segura' WITH GRANT OPTION;
FLUSH PRIVILEGES;

[INFO] El símbolo % significa "cualquier host". Es cómodo, pero menos seguro. Siempre que puedas, limita el acceso a las IPs que realmente lo necesiten.


Paso 5: Comprobar el archivo de configuración de MySQL (my.cnf)

A veces, una línea mal escrita o un parámetro incorrecto puede causar el error. Busca en el archivo my.cnf (normalmente en /etc/mysql/my.cnf o /etc/my.cnf) las siguientes secciones:

Sección [mysqld]

Asegúrate de que no haya líneas como skip-networking (esto deshabilita las conexiones TCP/IP por completo). Si la ves, coméntala con # al inicio.

Puerto

Verifica que el puerto esté correctamente definido:

port = 3306

Si lo cambiaste, recuerda que tu cliente debe usar el mismo puerto.

Log de errores

Revisa el log de errores de MySQL para obtener pistas más concretas. Normalmente está en /var/log/mysql/error.log. Puedes ver las últimas líneas con:

sudo tail -f /var/log/mysql/error.log

Allí pueden aparecer mensajes como "Can't start server: Bind on TCP/IP port: Address already in use" (si el puerto está ocupado) o "Can't create test file" (problemas de permisos en directorios).


Paso 6: Probar la conexión con herramientas sencillas

Una vez que hayas realizado los pasos anteriores, es hora de probar si la conexión funciona.

Desde la línea de comandos en el mismo servidor

mysql -u usuario -p -h 127.0.0.1 -P 3306

Si funciona, el problema era local. Si no, revisa los pasos 1 y 2.

Desde un equipo remoto (cliente MySQL)

mysql -u usuario -p -h IP_DEL_SERVIDOR -P 3306

Si recibes "Connection refused" de nuevo, el problema está en el firewall o en la configuración de bind-address.

Usando telnet (para ver si el puerto está abierto)

telnet IP_DEL_SERVIDOR 3306

Si ves un mensaje como "Connected to IP_DEL_SERVIDOR", el puerto está abierto. Si ves "Connection refused" o "Connection timed out", el problema es de red o firewall.

[WARNING] Telnet no está instalado por defecto en muchos sistemas. Puedes instalarlo con sudo apt install telnet o usar nc (netcat): nc -zv IP_DEL_SERVIDOR 3306.


FAQ MySQL: Preguntas frecuentes sobre "Connection refused"

¿Por qué recibo "Connection refused" si el servicio está corriendo?

Puede deberse a que MySQL solo escucha en localhost (127.0.0.1) y tú estás intentando conectar desde otra IP. Revisa el bind-address en my.cnf.

¿Cómo sé si el puerto 3306 está bloqueado por el firewall?

Usa telnet o nc desde otro equipo. Si el comando falla, es muy probable que el firewall esté bloqueando el puerto. También puedes revisar las reglas del firewall con sudo ufw status o sudo iptables -L.

¿Puedo cambiar el puerto por defecto de MySQL?

Sí, en my.cnf cambia la línea port = 3306 por el puerto que desees. Luego reinicia MySQL y asegúrate de que tu cliente use el nuevo puerto. También deberás abrir ese puerto en el firewall.

Uso Syspanel (HestiaCP), ¿cómo gestiono MySQL desde el panel?

Accede a tu panel a través de https://tu-dominio-o-ip:2106. Dentro, busca la sección de "Bases de Datos" o "Servicios". Desde allí puedes crear bases de datos, gestionar usuarios y ver el estado del servicio MySQL. Si necesitas cambiar configuraciones avanzadas (como bind-address), tendrás que hacerlo por línea de comandos o editando los archivos de configuración.

¿Es seguro permitir conexiones remotas a MySQL?

Solo si es estrictamente necesario. Si debes hacerlo, sigue estas reglas:

  • Usa contraseñas muy seguras.
  • Limita el acceso a IPs específicas en lugar de usar %.
  • Configura un firewall para permitir solo las IPs necesarias.
  • Considera usar una VPN o túneles SSH para mayor seguridad.

Resumen: Checklist rápida para solucionar "Connection refused"

  1. ¿Está MySQL en ejecución?sudo systemctl status mysql
  2. ¿Escucha en la IP correcta?sudo netstat -tlnp | grep 3306
  3. ¿El firewall permite el puerto 3306?sudo ufw status
  4. ¿El usuario tiene permisos desde tu IP?SELECT user, host FROM mysql.user;
  5. ¿El archivo my.cnf tiene configuraciones incorrectas? → Revisa bind-address, skip-networking y port.
  6. ¿Has reiniciado MySQL después de los cambios?sudo systemctl restart mysql

Si después de seguir todos estos pasos el error persiste, revisa los logs de MySQL en /var/log/mysql/error.log para pistas adicionales. A veces, un simple error tipográfico en el archivo de configuración puede ser la causa.

Recuerda que la paciencia y el método son tus mejores aliados. Cada uno de estos pasos está diseñado para descartar una causa común. ¡No te rindas! La mayoría de las veces, el error "Connection refused" se resuelve con una de estas comprobaciones.

[TIP] Si estás empezando, te recomiendo anotar cada cambio que hagas. Así, si algo sale mal, puedes deshacerlo fácilmente. Y siempre, antes de modificar archivos de configuración, haz una copia de seguridad: sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup.

¡Buena suerte con tu base de datos! Si tienes más dudas, recuerda que en la comunidad de MySQL y en foros especializados siempre hay alguien dispuesto a ayudar.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel