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

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

Actualizado el 25 de septiembre de 2025

[INFO] Este artículo está pensado para usuarios de DirectAdmin que se encuentran con el molesto error “Connection refused” al intentar conectar con su base de datos MySQL. No necesitas ser un experto en servidores para seguir esta guía, solo paciencia y acceso a tu panel de control.

Si estás leyendo esto, probablemente has visto un mensaje como ERROR 2002 (HY000): Can't connect to local MySQL server through socket o simplemente tu web deja de cargar mostrando un error de conexión a la base de datos. No te preocupes, es uno de los problemas más comunes en servidores con DirectAdmin y, en la mayoría de los casos, tiene una solución sencilla que puedes aplicar tú mismo.

Vamos a desglosar este error paso a paso, desde entender qué lo causa hasta las soluciones más efectivas, pensadas para que cualquier persona, incluso sin conocimientos avanzados de sistemas, pueda intentarlas con seguridad.

¿Qué significa exactamente "Connection refused"?

Para entenderlo fácil, imagina que tu web (por ejemplo, WordPress) es una persona que llama por teléfono a su amigo (la base de datos MySQL) para pedirle información. El error “Connection refused” es como si al llamar, el amigo no contestara o, peor aún, colgara inmediatamente.

Esto indica que el servidor donde está alojado MySQL está activo, pero por alguna razón está rechazando la conexión. No es que el servidor esté apagado (aunque a veces pasa), sino que hay algo que impide que la llamada se complete. Las causas suelen ser tres:

  1. El servicio MySQL no está corriendo (el amigo se fue a dormir).
  2. MySQL está escuchando en un puerto o dirección incorrecta (el amigo cambió de número de teléfono y no te avisó).
  3. Un firewall o configuración de red bloquea la conexión (hay un portero que no deja pasar la llamada).

Vamos a atacar cada una de estas posibilidades en orden de probabilidad y dificultad.

Primera solución: Verificar y reiniciar el servicio MySQL

Esta es la solución más básica y la que resuelve el problema en un 50% de los casos. A veces, por un fallo temporal, un reinicio del sistema o un error interno, el proceso de MySQL se detiene o se queda en un estado “zombie”.

Paso 1: Conectarse al servidor por SSH

Necesitas acceder a tu servidor. Si no sabes qué es SSH, es simplemente una forma de abrir una "ventana negra" de comandos en tu servidor. Puedes usar programas como PuTTY (en Windows) o la terminal integrada de Mac/Linux.

Te conectarás con tu usuario root o un usuario con privilegios de administrador, y la IP de tu servidor.

Paso 2: Comprobar el estado del servicio

Una vez dentro, escribe el siguiente comando y presiona Enter:

systemctl status mysql

O en algunos servidores más antiguos:

service mysql status

Verás un texto largo. Busca la línea que diga Active:. Si dice active (running), el servicio está corriendo. Si dice inactive (dead) o failed, entonces esa es la causa del error.

Paso 3: Reiniciar o arrancar el servicio

Si está detenido o falló, es momento de actuar. Ejecuta este comando:

systemctl restart mysql

Si el servicio estaba completamente detenido, usa:

systemctl start mysql

Después de esto, intenta conectar de nuevo a tu web. Si el problema era este, ya debería funcionar. Para verificar que todo está bien, puedes ejecutar:

mysqladmin -u root -p status

Te pedirá la contraseña de root de MySQL (no la de DirectAdmin). Si te muestra un mensaje de "Uptime" y "Threads", ¡perfecto!

[TIP] Si al reiniciar te da un error de "Permission denied" o "Job for mysql.service failed", es que hay un problema de permisos en los archivos de datos o de configuración. Pasa a la siguiente solución.

Segunda solución: Revisar la configuración de red y el archivo my.cnf

Si el servicio está activo pero sigue dando “Connection refused”, el problema es que MySQL está escuchando en el lugar equivocado. Piensa que MySQL tiene una "puerta" de entrada que debe estar abierta en la dirección correcta.

¿Dónde está el archivo de configuración?

En DirectAdmin, el archivo principal de configuración de MySQL se llama my.cnf y suele estar en /etc/my.cnf o /etc/mysql/my.cnf. Puedes verlo con el comando:

nano /etc/my.cnf

La línea clave: bind-address

Dentro de este archivo, busca una línea que diga bind-address. Esta línea le dice a MySQL qué dirección IP debe "escuchar" para aceptar conexiones.

  • Si dice bind-address = 127.0.0.1, solo acepta conexiones locales (desde el mismo servidor). Esto es lo normal y correcto para la mayoría de los casos.
  • Si dice bind-address = 0.0.0.0, acepta conexiones desde cualquier IP, lo cual puede ser un riesgo de seguridad.
  • Si la línea está comentada (con un # al principio), MySQL usará la configuración por defecto, que suele ser 127.0.0.1.

¿Qué debes hacer? Si tu web y tu base de datos están en el mismo servidor (lo más común en hosting compartido o VPS con DirectAdmin), la línea debe ser bind-address = 127.0.0.1. Si tienes una web externa que necesita conectar a esta base de datos, entonces necesitarías 0.0.0.0, pero eso es más avanzado y requiere configurar un usuario de MySQL con permisos de acceso remoto.

Otra línea importante: skip-networking

Dentro del mismo archivo, busca una línea que diga skip-networking. Si existe y no está comentada, MySQL está deshabilitando por completo las conexiones a través de la red (TCP/IP). Esto es una causa muy común del error.

Si la encuentras, coméntala poniendo un # al principio:

# skip-networking

Guarda los cambios (en nano: Ctrl+O, luego Enter, y Ctrl+X para salir) y reinicia MySQL de nuevo.

systemctl restart mysql

[WARNING] Si modificas bind-address a 0.0.0.0, asegúrate de tener un firewall configurado para que solo IPs específicas puedan acceder al puerto 3306. De lo contrario, dejas tu base de datos expuesta en internet.

Tercera solución: El problema del socket y los permisos

A veces, el error no es de red, sino de archivos. MySQL usa un archivo especial llamado "socket" para la comunicación local. Si este archivo no existe o no tiene los permisos correctos, la conexión falla.

Verificar el socket

En el archivo my.cnf, busca una línea que diga socket. Normalmente es algo como /var/lib/mysql/mysql.sock o /var/run/mysqld/mysqld.sock.

Verifica que el directorio que contiene ese archivo existe y que MySQL tiene permisos para escribir en él. Puedes hacerlo con:

ls -la /var/run/mysqld/

Deberías ver el archivo mysqld.sock (o similar). Si no existe, el problema es que MySQL no pudo crearlo al arrancar.

Solución de permisos

A menudo, el directorio del socket tiene los permisos incorrectos después de una actualización. Ejecuta estos comandos para corregirlos:

chown mysql:mysql /var/run/mysqld/
chmod 755 /var/run/mysqld/

Luego, reinicia el servicio:

systemctl restart mysql

Cuarta solución: Revisar el firewall (CSF o iptables)

Si has llegado hasta aquí y nada funciona, es hora de sospechar del portero: el firewall. En DirectAdmin, el firewall más común es CSF (ConfigServer Security & Firewall).

Comprobar si el puerto 3306 está bloqueado

El puerto por defecto de MySQL es el 3306. Si tu web está en el mismo servidor, el firewall no debería bloquear la conexión local, pero a veces hay reglas extrañas.

Puedes probar a deshabilitar el firewall temporalmente para ver si el problema es este:

csf -x

Esto detiene el firewall. Ahora intenta conectar a tu web. Si funciona, el firewall es el culpable. Para reactivarlo:

csf -e

Abrir el puerto correctamente

Si el firewall es el problema, no lo dejes desactivado. Abre el puerto 3306 solo para tu IP o para la IP de tu web (si es externa). En el archivo de configuración de CSF (/etc/csf/csf.conf), busca la línea TCP_IN y TCP_OUT y añade el puerto 3306 si no está.

Luego, aplica los cambios:

csf -r

[INFO] Si tu web y tu base de datos están en el mismo servidor, es muy raro que el firewall sea el problema. Esta solución es más relevante si estás intentando conectar desde un ordenador externo a tu base de datos y te da este error.

Quinta solución: El error en los logs de MySQL

Si ninguna de las soluciones anteriores funciona, necesitas ver los registros (logs) de MySQL para obtener más pistas. Es como leer la nota que el amigo dejó antes de irse.

Ver el log de errores

El log de errores suele estar en /var/log/mysql/error.log o /var/lib/mysql/*.err. Puedes ver las últimas líneas con:

tail -n 100 /var/log/mysql/error.log

Busca palabras clave como error, denied, failed, corrupt o Can't start. Esto te dará una pista exacta del problema.

Causas comunes en los logs

  • Table 'mysql.user' doesn't exist: Indica que la base de datos del sistema está corrupta. Esto requiere una reparación más avanzada.
  • InnoDB: Corrupted page: Hay un problema con los archivos de datos de InnoDB. La solución puede ser forzar una recuperación (algo más técnico).
  • Can't create/write to file: Problemas de permisos en el directorio de datos.

Solución avanzada: Reparar tablas corruptas (para valientes)

Si el log menciona tablas corruptas, puedes intentar repararlas. Este proceso es más delicado, así que ve con cuidado.

Para tablas MyISAM

Detén MySQL:

systemctl stop mysql

Luego, usa la herramienta myisamchk para reparar todas las tablas de una base de datos específica:

myisamchk -r /var/lib/mysql/tu_base_de_datos/*.MYI

Reemplaza tu_base_de_datos con el nombre real. Luego, reinicia MySQL.

Para tablas InnoDB

Es más complejo. Deberás añadir una línea en my.cnf dentro de la sección [mysqld]:

innodb_force_recovery = 1

Luego, reinicia MySQL. Esto hará que MySQL arranque en modo de recuperación. Haz un volcado (dump) de tus bases de datos (con mysqldump) para respaldar la información, ya que en este modo MySQL es de solo lectura. Después de respaldar, elimina la línea de innodb_force_recovery y restaura las bases de datos desde el volcado.

[WARNING] Este modo de recuperación es agresivo. No lo uses si no estás seguro de lo que haces, ya que podrías perder datos. Si no te sientes cómodo, contacta con tu proveedor de hosting.

Preguntas Frecuentes (FAQ)

¿Por qué me pasa esto solo a mí en DirectAdmin?

Es un problema común cuando se llena el disco duro, hay una actualización fallida de MySQL o un cambio brusco de configuración. No es un reflejo de que hayas hecho algo mal.

¿Puedo perder mis datos si sigo estos pasos?

La mayoría de los pasos son seguros (reiniciar, verificar configuraciones). Los únicos que implican riesgo son los de reparación de tablas. Siempre es recomendable tener un backup reciente.

¿Debo contactar con mi proveedor de hosting?

Si has llegado hasta aquí y el error persiste, sí. Es posible que el problema sea a nivel de hardware o de una configuración de red más profunda que no puedes tocar desde tu panel. Ellos tienen herramientas para diagnosticar y reparar el servidor a bajo nivel.

¿El error "Connection refused" es lo mismo que "Access denied"?

No. “Access denied” significa que MySQL está funcionando, pero el usuario o la contraseña que estás usando son incorrectos. “Connection refused” significa que MySQL no está aceptando la conexión en absoluto, el problema es de red o de servicio.

Conclusión final

El error “Connection refused” en DirectAdmin es frustrante, pero en la gran mayoría de los casos se resuelve con un simple reinicio del servicio MySQL. Si no es así, la revisión del archivo my.cnf y los permisos del socket suelen solucionarlo. El firewall y los logs son tus siguientes aliados.

Esperamos que esta guía extensa te haya sido de gran ayuda. Recuerda siempre ir paso a paso y con calma. Si no te sientes seguro en algún punto, no dudes en pedir ayuda a un profesional o a tu proveedor de hosting, que para eso están. ¡Buena suerte!

¿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