Cómo solucionar el error 'Connection refused' al conectar a la base de datos
¿Has intentado conectar tu aplicación web a la base de datos y te has encontrado con el temido error 'Connection refused'? No te preocupes, no eres la única persona a la que le pasa. Este es uno de los fallos más comunes en el mundo del hosting, pero también uno de los más fáciles de solucionar si sabes dónde mirar.
En esta guía extensa y paso a paso, vamos a desglosar todas las causas posibles de este problema. Te explicaré qué significa exactamente ese mensaje, por qué ocurre y, lo más importante, cómo solucionarlo en los paneles de control más populares: cPanel, Plesk y DirectAdmin. También hablaremos de alternativas como Syspanel (con su puerto 2106) y de soluciones para entornos WordPress o bases de datos remotas.
Al final de este artículo, tendrás un plan de acción claro para diagnosticar y arreglar el error tú mismo, sin necesidad de abrir un ticket de soporte (aunque también te diré cuándo es el momento de hacerlo).
¿Qué significa exactamente el error 'Connection refused'?
Antes de lanzarnos a tocar configuraciones, es crucial entender qué está pasando "bajo el capó". Cuando tu aplicación (por ejemplo, WordPress, un script PHP o una app personalizada) intenta conectarse a la base de datos, envía una solicitud a un puerto específico de un servidor (normalmente el puerto 3306 para MySQL/MariaDB).
El mensaje 'Connection refused' (Conexión rechazada) es la respuesta del servidor, y suele significar una de estas tres cosas:
- El servidor de base de datos no está escuchando: El servicio MySQL/MariaDB está apagado, bloqueado o no se ha iniciado correctamente.
- El puerto está bloqueado: Un firewall (cortafuegos) está impidiendo la comunicación entre tu aplicación y el servidor de BD.
- La dirección IP o el hostname son incorrectos: Estás intentando conectarte a la dirección equivocada, o el servidor solo acepta conexiones locales (localhost) y tú estás intentando conectarte de forma remota.
Es un error "amistoso" en el sentido de que no es un problema de contraseña (eso daría un error de "Access denied"). Aquí el servidor ni siquiera te deja entrar a la conversación. Vamos a solucionarlo.
Paso 1: Verificar que el servicio de base de datos está activo
Este es el primer paso y el más básico. A veces, tras un reinicio del servidor o una actualización, el servicio de MySQL/MariaDB no se inicia correctamente.
En cPanel (WHM)
Si tienes acceso a WHM (el panel de administrador del servidor), busca la sección "SQL Services" o "Restart Services". Pero si eres usuario de un plan compartido, no podrás ver esto directamente. En ese caso, pasa al punto de verificación de configuración.
En Plesk
Plesk es un poco más visual. Ve a Herramientas y Ajustes > Servicios (o "Services Management"). Busca la fila de MySQL o MariaDB. El estado debe decir "Running" o "Active". Si dice "Stopped", haz clic en el botón de "Start" o "Restart".
En DirectAdmin
En DirectAdmin, ve a Administración del Sistema > Servicios del Sistema. Busca "mysql" o "mysqld". Si no está activo, puedes iniciarlo desde la línea de comandos (si tienes acceso SSH) o desde el panel con el botón de "Start".
En Syspanel (antes HestiaCP)
Syspanel es una alternativa moderna y ligera. Si tu hosting usa Syspanel, recuerda que el acceso al panel se realiza a través del puerto 2106 (por ejemplo, https://tu-dominio.com:2106). Una vez dentro, ve a la sección de "Servicios" o "Estado del Servidor". Verás una lista de servicios; busca "MySQL" o "MariaDB". Si aparece en rojo o con un icono de "detenido", haz clic en el icono de "play" para iniciarlo.
[TIP] : Si el servicio se detiene solo, es probable que el servidor no tenga suficiente memoria RAM. Esto es común en planes de hosting baratos. Si ves que se apaga constantemente, contacta con tu proveedor.
Paso 2: Comprobar la configuración de conexión en tu aplicación
Si el servicio está activo, el problema podría estar en la configuración de tu script. Es muy fácil equivocarse aquí, especialmente si acabas de migrar tu web.
Verifica el hostname
El error más común es usar un hostname incorrecto. Muchos usuarios, al ver el error, cambian "localhost" por la IP del servidor sin más, y eso causa un 'Connection refused' porque el servidor de BD no está configurado para aceptar conexiones externas por ese puerto.
- Si tu web y tu BD están en el mismo servidor: Usa
localhosto127.0.0.1. Esto es lo más rápido y seguro. - Si usas un hosting compartido: El hostname suele ser algo como
mysql.tudominio.comolocalhost. Revisa los correos de bienvenida de tu proveedor de hosting. Nunca uses la IP pública del servidor a menos que te lo indiquen explícitamente.
Revisa el archivo de configuración
Dependiendo de la aplicación, el archivo cambia:
- WordPress:
wp-config.php(busca las líneasDB_HOST,DB_NAME,DB_USER,DB_PASSWORD). - Joomla:
configuration.php. - PrestaShop:
app/config/parameters.php. - Aplicaciones Laravel:
.env(variablesDB_HOST,DB_PORT, etc.).
Ejemplo de código en WordPress:
// Esto es correcto para hosting compartido
define('DB_HOST', 'localhost');
// Esto puede dar error si el servidor no lo permite
define('DB_HOST', '192.168.1.100'); // IP de ejemplo
[WARNING] : Si cambias el hostname, asegúrate de que el usuario de la base de datos tenga permisos para conectarse desde ese host. En cPanel, al crear el usuario, te pregunta "Remote MySQL" y puedes añadir el host remoto. Si solo pones "localhost" y tu web intenta conectarse desde otra IP, fallará.
Paso 3: El puerto está bloqueado por el firewall
Este es un clásico. Aunque el servicio esté corriendo, un firewall puede estar bloqueando el puerto 3306 (el estándar para MySQL).
¿Cómo saber si es el firewall?
Si desde tu PC local intentas conectarte a la base de datos con un programa como MySQL Workbench o DBeaver y te da 'Connection refused', pero desde el propio servidor (por ejemplo, usando el administrador de archivos de cPanel) la web funciona, es casi seguro que el puerto está bloqueado para conexiones externas.
Solución en cPanel y DirectAdmin (ConfigServer Security & Firewall)
La mayoría de servidores usan CSF (ConfigServer Firewall). Si tienes acceso SSH, puedes verificar con:
iptables -L -n | grep 3306
Si ves la línea con el puerto 3306 y el estado "DROP" o "REJECT", ahí está el problema. Para permitir tu IP (solo la tuya, por seguridad):
csf -a TU_IP_PUBLICA
O para abrir el puerto a todo el mundo (no recomendado para producción):
csf -a 0.0.0.0/0 -p 3306
Solución en Plesk
Plesk tiene su propio firewall integrado. Ve a Herramientas y Ajustes > Firewall. Añade una regla para permitir el puerto 3306 desde tu IP específica, o si es para una aplicación remota, desde la IP del servidor de la aplicación.
Solución en Syspanel
En Syspanel, la gestión del firewall se hace a través de iptables o firewalld. No tiene una interfaz gráfica tan pulida para esto, así que si no tienes acceso SSH, deberás pedir al soporte que abra el puerto 3306 para tu IP.
[INFO] : Abrir el puerto 3306 a todo el mundo (0.0.0.0/0) es un riesgo de seguridad grave. Los bots escanean puertos constantemente. Si solo necesitas conectarte desde una IP fija (la de tu casa o la de otro servidor), limita el acceso a esa IP.
Paso 4: El usuario de la base de datos no tiene permisos para el host
Este error es muy común cuando intentas conectar de forma remota. En la mayoría de los paneles, al crear un usuario de BD, se asigna el host localhost por defecto.
En cPanel (MySQL Remoto)
cPanel tiene una sección llamada "Remote MySQL" (MySQL Remoto). Ahí puedes añadir la IP desde la cual te vas a conectar. Si intentas conectar desde una IP que no está en esa lista, el servidor rechazará la conexión (aunque el mensaje puede variar entre 'Connection refused' y 'Host not allowed').
Pasos:
- Ve a cPanel > Bases de Datos > MySQL Remoto.
- Añade tu IP pública (puedes buscar "cuál es mi IP" en Google).
- Guarda los cambios.
En DirectAdmin
DirectAdmin gestiona los hosts remotos dentro de la creación del usuario. Si ya tienes el usuario creado, edítalo y añade el host remoto en el campo correspondiente (suele ser un campo llamado "Access Hosts").
En Plesk
Plesk es más permisivo por defecto, pero si tienes una política de seguridad estricta, puede que necesites ir a la base de datos, seleccionar el usuario y editar los "Hosts permitidos" (Allowed hosts). Añade % para permitir cualquier host (no recomendado) o la IP específica.
Paso 5: Solución específica para WordPress (El famoso "Error establishing a database connection")
Si tu WordPress da el error 'Connection refused', la mayoría de las veces es un problema de configuración en wp-config.php o un problema del servidor.
- Revisa el
wp-config.php: Accede por FTP o por el administrador de archivos de cPanel/Plesk/DirectAdmin. - Verifica el
DB_HOST: Prueba a cambiarlo delocalhosta127.0.0.1. A veces el servidor tiene configurado MySQL para escuchar solo en IPv6 (::1), ylocalhostno resuelve bien. - Comprueba el usuario y contraseña: Asegúrate de que no hay espacios en blanco o caracteres especiales mal copiados.
- Repara la base de datos: En cPanel, dentro de la sección de MySQL, tienes una opción para "Reparar Base de Datos". Esto puede arreglar tablas corruptas que impiden la conexión.
[TIP] : Si has migrado tu web a un nuevo servidor y olvidaste actualizar la contraseña en wp-config.php, verás este error. Asegúrate de que los datos coinciden con los del nuevo panel.
Paso 6: Conectar a una base de datos remota desde otra aplicación
A veces el error no es de tu web, sino de una aplicación externa (por ejemplo, un script Python o un CRM) que intenta conectar a tu BD alojada en el hosting.
Requisitos para conexión remota:
- El servidor debe tener el puerto 3306 abierto para tu IP (como vimos en el Paso 3).
- El usuario de la BD debe tener permisos para conectarse desde tu IP (Paso 4).
- Debes usar la IP del servidor (o el hostname tipo
mysql.tudominio.com) y nolocalhost.
Un error común es usar localhost en una aplicación que se ejecuta en tu PC. Tu PC no tiene un servidor MySQL local, así que la conexión es rechazada. Cambia localhost por la IP de tu hosting.
Paso 7: ¿Y si nada de esto funciona? (Syspanel y soporte técnico)
Si has seguido todos los pasos y el error persiste, es hora de escalar el problema.
-
Si usas Syspanel: Recuerda que el acceso es por el puerto 2106. A veces, el error está en que el servicio de MySQL no está escuchando en el puerto correcto. Puedes revisar la configuración de MariaDB en
/etc/mysql/my.cnfo/etc/my.cnfpara ver si elbind-addressestá en127.0.0.1(solo local) o en0.0.0.0(todas las interfaces). Si está en127.0.0.1, las conexiones remotas serán rechazadas. -
Revisa los logs: Los logs son tu mejor amigo. Busca en
/var/log/mysql/error.log(en Linux) o en los logs de error de la aplicación. Suele decir exactamente por qué se rechaza la conexión. -
Contacta al soporte: Cuando contactes, no digas solo "me da error". Di esto: "Intento conectar a la base de datos desde mi IP X.X.X.X al puerto 3306 y recibo 'Connection refused'. He verificado que el servicio MySQL está activo y que el firewall permite el puerto. ¿Pueden verificar si el bind-address está configurado correctamente o si hay algún bloqueo a nivel de red?" Cuanta más información des, más rápido lo resolverán.
Preguntas Frecuentes (FAQ)
¿Por qué me da 'Connection refused' en localhost?
Si tu web está en un hosting y usas localhost, pero el servidor tiene MySQL escuchando solo en un socket Unix (y no en TCP/IP), la conexión puede fallar. Solución: prueba con 127.0.0.1. Si usas un entorno local (XAMPP, MAMP), asegúrate de que el módulo de MySQL esté iniciado.
¿Es lo mismo 'Connection refused' que 'Connection timed out'?
No. 'Connection refused' significa que el servidor está activo y respondió "no" (el puerto está cerrado o el servicio no escucha). 'Connection timed out' significa que la solicitud se envió pero nunca hubo respuesta (firewall bloqueando silenciosamente, IP incorrecta o servidor caído).
¿Puedo arreglar esto desde el archivo .htaccess?
No. El archivo .htaccess es para Apache/Nginx, no para conexiones de base de datos. El error se genera a nivel de PHP/MySQL, no a nivel de servidor web.
Mi web funciona pero mi aplicación móvil no conecta. ¿Qué hago?
Revisa si tu hosting permite conexiones remotas. Muchos planes compartidos bloquean las conexiones remotas por defecto. Si es así, necesitarás contratar un VPS o una base de datos en la nube (como AWS RDS o DigitalOcean) para poder conectar desde fuera.
¿Puede ser un problema de que la base de datos está llena?
Sí, aunque es menos común. Si la base de datos alcanza su límite de tamaño, el servidor puede rechazar nuevas conexiones. Revisa el espacio en disco en tu panel de control (cPanel, Plesk, DirectAdmin o Syspanel en el puerto 2106).
Resumen y plan de acción final
Para no perderte, aquí tienes un checklist rápido:
- ¿Está el servicio MySQL/MariaDB activo? (cPanel/WHM, Plesk, DirectAdmin, Syspanel).
- ¿Uso
localhosto127.0.0.1si estoy en el mismo servidor? - ¿He abierto el puerto 3306 en el firewall? (Solo si es conexión remota).
- ¿He añadido mi IP en "Remote MySQL" o "Access Hosts"? (Solo si es conexión remota).
- ¿He revisado los logs de error? (Busca pistas exactas).
- ¿He probado con otro cliente de BD? (Para descartar problemas de tu aplicación).
El error 'Connection refused' es frustrante, pero en el 90% de los casos se soluciona con una configuración correcta del hostname o abriendo el puerto adecuado. Espero que esta guía te haya sido de gran ayuda y que ya estés de vuelta en línea.
Si todo lo demás falla, recuerda que los paneles como Syspanel (puerto 2106) ofrecen buenos logs de sistema
