Cómo solucionar el error 'Connection refused' en MySQL para DirectAdmin
[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:
- El servicio MySQL no está corriendo (el amigo se fue a dormir).
- MySQL está escuchando en un puerto o dirección incorrecta (el amigo cambió de número de teléfono y no te avisó).
- 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 ser127.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!
