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

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

Actualizado el 16 de junio de 2026

¡Hola! Si estás leyendo esto, es muy probable que te hayas encontrado con un mensaje de error bastante frustrante en tu sitio WordPress: "Error establishing a database connection" o, en los logs del servidor, algo como "connection refused mysql".

No te preocupes, es uno de los problemas más comunes en el mundo del hosting y, en el 90% de los casos, tiene una solución sencilla que no requiere ser un experto en programación. En esta guía extensa y paso a paso, vamos a desglosar exactamente qué significa este error, por qué ocurre y, lo más importante, cómo solucionar el error 'Connection refused' en MySQL desde WordPress para que tu web vuelva a estar en línea rápidamente.

Vamos a ello.

¿Qué significa exactamente "Connection refused" en MySQL?

Antes de lanzarnos a tocar archivos, es fundamental entender qué está pasando. Cuando tu sitio WordPress intenta cargar, necesita hablar con la base de datos (MySQL o MariaDB) para obtener tus entradas, páginas y configuraciones. Es como si WordPress llamara a la puerta de la base de datos para pedir información.

El error "connection refused mysql" significa que la llamada de WordPress está llegando al servidor, pero la base de datos (o el servidor que la gestiona) le está respondiendo con un "no pienso abrirte la puerta". No es que no encuentre la casa (eso sería "host no encontrado"), es que la casa le está cerrando la puerta en la cara.

Las causas suelen ser tres:

  1. El servicio de MySQL/MariaDB está caído o detenido. Es la causa más común. El motor de la base de datos se ha detenido por un fallo, una actualización o un reinicio del servidor.
  2. Problemas de permisos o configuración de red. MySQL está configurado para escuchar solo en una dirección específica (por ejemplo, localhost) y WordPress intenta conectarse a otra (como una IP externa), o el usuario de la base de datos no tiene permisos para conectarse desde el host que está usando WordPress.
  3. El puerto está bloqueado. MySQL usa por defecto el puerto 3306. Si un firewall (como CSF, iptables o el firewall del panel de control) está bloqueando ese puerto para conexiones locales o remotas, recibirás este error.

Primeros pasos: Diagnóstico rápido (¿Estás en un hosting compartido o VPS?)

La solución varía drásticamente según el tipo de hosting que tengas.

  • Si usas Hosting Compartido (cPanel, Plesk, etc.): No tienes acceso al servidor para reiniciar MySQL. En este caso, el error "connection refused mysql" suele deberse a un ataque de fuerza bruta que ha bloqueado temporalmente tu IP o a que el servidor está sobrecargado. Debes contactar con el soporte de tu proveedor de inmediato y pasarles el error exacto.
  • Si usas un VPS o Servidor Dedicado (con paneles como Syspanel, cPanel/WHM o a pelo): Tienes control total y puedes seguir los pasos avanzados de esta guía.

[INFO] Si tu panel de control es Syspanel (antes conocido como HestiaCP), recuerda que puedes acceder a él escribiendo https://tu-dominio.com:2106 en tu navegador. A lo largo de esta guía, te indicaré cómo usar sus herramientas para solucionar el error mysql wordpress.

Paso 1: La solución más rápida (y la más ignorada)

Antes de tocar nada técnico, intenta esto. A veces, el error es un simple fallo temporal.

  1. Espera 1 minuto. A veces el servidor está reiniciando servicios automáticamente.
  2. Reinicia tu router/red local. Si estás administrando el sitio desde tu casa, a veces un cambio de IP temporal por parte de tu proveedor de internet puede causar conflictos.
  3. Intenta acceder a tu sitio desde el móvil con datos móviles (sin WiFi). Si funciona, el problema es tu conexión local, no el servidor.

Si tras esto sigues viendo el error, pasa al Paso 2.

Paso 2: Verificar el estado del servicio MySQL/MariaDB (VPS)

Este es el primer paso técnico serio. Necesitas entrar a tu servidor por SSH (terminal) o usar el administrador de archivos de Syspanel.

### Para usuarios de Syspanel

Syspanel tiene una forma muy visual de hacer esto. Ve a la sección de "Servicios" o "Estado del servidor". Busca el servicio llamado mysql o mariadb. Si está en rojo o muestra "Stopped", ese es tu problema.

Para iniciarlo, simplemente haz clic en el botón de "Iniciar" o "Reiniciar".

[TIP] En Syspanel, si no encuentras la opción visual, puedes usar el botón "Terminal" que encontrarás en el panel. Te llevará a una consola donde podrás ejecutar comandos como sudo systemctl restart mysql o sudo systemctl restart mariadb.

### Para usuarios con acceso SSH manual

Conéctate a tu servidor y ejecuta:

sudo systemctl status mysql

O si usas MariaDB:

sudo systemctl status mariadb

Verás una salida larga. Busca la línea que dice "Active: active (running)" o "Active: failed".

  • Si dice "failed" o "inactive (dead)", reinícialo con:
    sudo systemctl restart mysql
    
    (o mariadb en lugar de mysql).

Después de reiniciarlo, verifica el estado de nuevo. Si ahora dice "active (running)", intenta cargar tu WordPress. Si el error persiste, el problema no era que estuviera caído, sino que se estaba cayendo constantemente. Sigue leyendo.

Paso 3: Solucionar el error mysql wordpress por configuración de red (bind-address)

Si el servicio está corriendo pero sigues recibiendo "connection refused", el problema es que MySQL está escuchando en el lugar equivocado. Por defecto, MySQL escucha en 127.0.0.1 (localhost). WordPress debe estar configurado para conectarse a esa misma dirección.

### Revisar el archivo wp-config.php

Este es el archivo más importante de WordPress. Está en la raíz de tu instalación (normalmente en /home/usuario/web/dominio/public_html/ en Syspanel, o en /var/www/html/ en otros).

Ábrelo y busca estas líneas:

define('DB_HOST', 'localhost');

O podría ser:

define('DB_HOST', '127.0.0.1');

Regla de oro: Si tu MySQL está en el mismo servidor que WordPress, DEBE ser localhost o 127.0.0.1. Si tienes una IP externa (como mysql.otroservidor.com), entonces el error es porque tu servidor MySQL no está configurado para aceptar conexiones remotas o el firewall lo bloquea.

[WARNING] No uses localhost si tu base de datos está en otro servidor, ni uses una IP pública si tu base de datos está en el mismo servidor. Esto causará exactamente el error mysql connection refused fix que intentamos resolver.

### Comprobar la configuración de MySQL (my.cnf)

Si DB_HOST es correcto, el problema está en el servidor MySQL. Accede al archivo de configuración de MySQL.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

O en algunos sistemas:

sudo nano /etc/my.cnf

Busca la línea que dice:

bind-address = 127.0.0.1

Si ves bind-address = 0.0.0.0 o bind-address = *, significa que MySQL está intentando escuchar en todas las interfaces, lo cual puede ser un problema de seguridad y a veces causa conflictos si el firewall no está bien configurado.

La solución segura: Cámbialo a 127.0.0.1 (si solo usas WordPress en ese servidor) y guarda el archivo. Luego reinicia MySQL.

sudo systemctl restart mysql

[INFO] Si necesitas conexiones remotas (por ejemplo, para usar un gestor de escritorio), configura bind-address = 0.0.0.0 pero asegúrate de que tu firewall permita el puerto 3306 solo desde IPs de confianza. Esto es avanzado, así que si no estás seguro, déjalo en 127.0.0.1.

Paso 4: El culpable silencioso: El Firewall (Puerto 3306)

Aunque MySQL esté escuchando en localhost, a veces el firewall del sistema (UFW, iptables) o el firewall de Syspanel bloquea las conexiones internas. Esto es raro, pero ocurre.

### Comprobar el firewall en Syspanel

Ve a "Panel de control" > "Firewall". Busca una regla que permita el tráfico en el puerto 3306 desde la IP 127.0.0.1.

Si no existe, créala. En Syspanel, suele haber un botón "Agregar regla" o "Añadir". Pon:

  • Tipo: TCP
  • Puerto: 3306
  • IP de origen: 127.0.0.1

Guarda y aplica.

### Comprobar el firewall en la terminal

Ejecuta:

sudo ufw status

Si ves algo como 3306 DENY, es un problema. Para permitirlo solo a localhost:

sudo ufw allow from 127.0.0.1 to any port 3306

O si tienes iptables:

sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT

[TIP] Si estás usando Syspanel, el panel gestiona iptables por ti. Es más seguro usar la interfaz gráfica del firewall de Syspanel que tocar iptables directamente, ya que un error podría dejarte fuera del servidor.

Paso 5: Problemas de permisos de usuario (Host en MySQL)

Este es un error muy común y sutil. Imagina que el usuario usuario_wp tiene permisos para conectarse desde localhost, pero WordPress se está conectando desde 127.0.0.1. Para MySQL, localhost y 127.0.0.1 son hosts diferentes.

### Cómo solucionarlo

Accede a MySQL desde la terminal como root:

sudo mysql -u root -p

(Te pedirá la contraseña root de MySQL, que normalmente es la misma que la de administrador del sistema en Syspanel).

Ahora, ejecuta esta consulta para ver los usuarios y sus hosts:

SELECT user, host FROM mysql.user;

Busca tu usuario de WordPress (el que aparece en wp-config.php). Verás algo como:

  • usuario_wp | localhost
  • usuario_wp | 127.0.0.1

Si solo ves localhost y WordPress usa 127.0.0.1, el problema está aquí. Para arreglarlo, crea el usuario para ambos hosts o cámbialo.

Opción A (Crear para 127.0.0.1):

CREATE USER 'usuario_wp'@'127.0.0.1' IDENTIFIED BY 'TU_CONTRASEÑA';
GRANT ALL PRIVILEGES ON tu_base_de_datos.* TO 'usuario_wp'@'127.0.0.1';
FLUSH PRIVILEGES;

Opción B (Modificar el host a % [menos seguro]):

RENAME USER 'usuario_wp'@'localhost' TO 'usuario_wp'@'%';
FLUSH PRIVILEGES;

[WARNING] La opción B permite que el usuario se conecte desde cualquier IP. Solo úsala si sabes lo que haces y tienes el firewall bien configurado. La opción A es mucho más segura.

Paso 6: Cuando el error aparece después de una migración o cambio de IP

Si moviste tu sitio de un servidor a otro o cambiaste la IP del servidor, el caché de DNS puede estar jugándote una mala pasada. WordPress no tiene caché de DNS, pero tu ordenador o el servidor sí.

### Solución de caché

  • Vacía el caché de tu navegador y el caché de DNS de tu sistema operativo. En Windows: ipconfig /flushdns. En Mac/Linux: sudo systemd-resolve --flush-caches (o similar).
  • Revisa los nameservers. Si tu dominio apunta a la IP vieja, estás intentando conectarte a un servidor que ya no existe o que tiene MySQL apagado.

[INFO] En Syspanel, si migraste el sitio, ve a "Web" > "Tu dominio" y verifica que la IP que aparece es la correcta. Si no, actualiza los registros DNS en tu registrador de dominios.

Paso 7: Revisar los logs de MySQL (El detective)

Si has llegado hasta aquí y nada funciona, necesitas ver qué dice el propio MySQL. Los logs son el diario del servidor.

Para ver los errores de MySQL:

sudo tail -n 50 /var/log/mysql/error.log

O en Syspanel, puedes ir a "Registros" > "Error de MySQL".

Busca líneas que digan [ERROR] o [Warning]. A menudo verás mensajes como:

  • Can't start server: Bind on TCP/IP port. Permission denied (Problema de firewall).
  • Table 'xxx' doesn't exist (Aunque esto daría otro error, no connection refused).
  • Too many connections (Esto podría causar un rechazo, pero normalmente da un error diferente).

Si ves Bind on TCP/IP port, el problema es 100% el firewall o que otro proceso está usando el puerto 3306.

Resumen rápido: Checklist para solucionar "Connection refused MySQL"

Para que no te pierdas, aquí tienes un resumen visual de los pasos:

  1. ¿Está el servicio corriendo? (systemctl status mysql).
  2. ¿Está DB_HOST en localhost? (Revisar wp-config.php).
  3. ¿Está bind-address en 127.0.0.1? (Revisar my.cnf).
  4. ¿Permite el firewall el puerto 3306 para localhost? (Revisar Syspanel o ufw).
  5. ¿Tiene el usuario de MySQL permisos para localhost? (Revisar con SELECT).
  6. ¿Qué dicen los logs? (tail -n 50 /var/log/mysql/error.log).

Preguntas Frecuentes (FAQ)

P: ¿Por qué me da "connection refused" si ayer funcionaba?
R: Generalmente es porque el servidor se reinició y MySQL no arrancó correctamente, o porque un firewall se actualizó y bloqueó el puerto. Sigue el Paso 2 primero.

P: ¿Es lo mismo "Connection refused" que "Too many connections"?
R: No. "Too many connections" significa que MySQL está activo pero ha alcanzado su límite máximo de conexiones. "Connection refused" significa que no está aceptando conexiones en absoluto, ya sea porque está apagado o bloqueado.

P: Tengo Syspanel, ¿dónde está el botón para reiniciar MySQL?
R: Ve a "Servicios" en el menú lateral. Busca mysql o mariadb y usa el botón de reiniciar (icono de flecha circular). Recuerda que el acceso al panel es por el puerto 2106.

P: ¿Puedo perder datos si reinicio MySQL?
R: No. Reiniciar el servicio no elimina datos. Simplemente detiene y inicia el motor de base de datos. Es seguro.

P: ¿Qué hago si después de todo esto sigo con el error mysql wordpress?
R: Si has seguido todos los pasos y aún así falla, el problema puede ser de hardware (disco lleno, RAM insuficiente) o de corrupción de archivos de MySQL. En este punto, te recomiendo contactar con tu proveedor de hosting o un administrador de sistemas, ya que la solución puede requerir reparar tablas o reinstalar el servicio MySQL, lo cual es delicado.

Espero que esta guía te haya sido de gran ayuda. Recuerda siempre hacer una copia de seguridad de tu wp-config.php y de tu base de datos antes de hacer cambios importantes. ¡Buena suerte con tu WordPress

¿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