Cómo solucionar el error 'Connection refused' en bases de datos de DirectAdmin
Primeros pasos: entender qué significa "Connection refused"
Cuando tu web o aplicación te muestra el mensaje "Connection refused" (conexión rechazada) al intentar acceder a la base de datos, significa que el servidor donde está alojado tu DirectAdmin está rechazando activamente la petición de conexión. A diferencia de un error de "timeout" (donde no hay respuesta), aquí el servidor responde con un "no quiero conectarme".
Este error es muy común cuando el servicio de MySQL o MariaDB se ha caído, está reiniciándose, o tiene problemas de configuración. La buena noticia es que en la mayoría de los casos lo puedes solucionar tú mismo siguiendo estos pasos, sin necesidad de abrir un ticket de soporte.
[INFO] Este artículo está pensado para usuarios de DirectAdmin con acceso al panel de control y, preferiblemente, acceso SSH (terminal). Si no tienes acceso SSH, salta a la sección de "Soluciones desde el panel".
¿Por qué ocurre el error "Connection refused" en DirectAdmin?
Antes de lanzarnos a solucionar el error, es útil entender las causas más frecuentes. Así podrás identificarlo más rápido la próxima vez.
Causas más comunes
- El servicio MySQL/MariaDB está caído: Es la causa más habitual. El proceso se detuvo por un fallo del sistema, falta de memoria o un cierre incorrecto.
- El puerto 3306 está bloqueado: El firewall del servidor (CSF, iptables) puede estar bloqueando las conexiones externas o incluso las internas.
- Configuración incorrecta de los archivos de bind: MySQL está configurado para escuchar solo en
127.0.0.1(localhost) y tu aplicación intenta conectar a otra IP. - El socket de MySQL no existe o tiene permisos incorrectos: En algunos casos, el archivo
/var/run/mysqld/mysqld.sockse ha borrado o no tiene los permisos adecuados. - Sobrecarga de conexiones: Has alcanzado el límite
max_connectionsy el servidor rechaza nuevas peticiones. - Problemas de espacio en disco: Si el disco está lleno, MySQL puede negarse a arrancar o aceptar conexiones.
Solución 1: Comprobar el estado del servicio desde DirectAdmin
Este es el primer paso, y el más sencillo. Accede a tu panel de DirectAdmin y sigue estos pasos:
- Inicia sesión en tu panel de DirectAdmin (normalmente en
https://tu-dominio.com:2222). - Busca la sección "Administración del sistema" o "Servicios" (depende de la versión, puede aparecer como "System Services" o "Service Monitor").
- Busca en la lista los servicios MySQL y MariaDB.
- Comprueba el estado: si aparece como "Stopped" o "Down", significa que está caído.
Cómo iniciar el servicio desde el panel
- Haz clic en el botón "Start" o "Iniciar" junto al servicio MySQL.
- Espera unos segundos y refresca la página.
- Vuelve a comprobar el estado: debería aparecer como "Running" o "Up".
[TIP] Si el servicio se inicia pero se vuelve a caer a los pocos segundos, el problema es más profundo (configuración o corrupción). Pasa a la siguiente sección.
Solución 2: Acceso por SSH y diagnóstico manual
Si no tienes acceso SSH, contacta con tu proveedor de hosting o salta a la sección de "Soluciones desde el panel". Para los que sí tienen acceso, aquí va el método infalible.
Paso 1: Conectarse al servidor
ssh usuario@tu-servidor.com
Sustituye usuario por tu usuario root o el usuario con privilegios sudo.
Paso 2: Verificar el estado del servicio
Ejecuta este comando para ver si MySQL está corriendo:
systemctl status mysql
O si usas MariaDB:
systemctl status mariadb
Si el servicio está caído, verás un mensaje en rojo con "inactive (dead)". Si está activo pero con errores, verás logs de fallos.
Paso 3: Intentar iniciar el servicio manualmente
Para intentar levantar el servicio:
systemctl start mysql
O para MariaDB:
systemctl start mariadb
Si se inicia correctamente, verás "active (running)". Si falla, te dará un mensaje de error. Copia ese mensaje, es oro puro para el diagnóstico.
Paso 4: Revisar los logs de errores
Los logs de MySQL son la mejor fuente de información. Ejecuta:
tail -100 /var/log/mysql/error.log
O si no existe esa ruta, prueba con:
tail -100 /var/log/mysqld.log
Busca líneas que contengan "ERROR", "FATAL", "Can't connect" o "Out of memory".
Solución 3: Reparar problemas comunes de configuración
Aquí van los problemas más típicos y cómo solucionarlos.
Problema de espacio en disco
Un disco lleno es la causa más común de que MySQL se caiga y no pueda arrancar. Comprueba el espacio disponible:
df -h
Si ves que la partición principal está al 100%, necesitas liberar espacio. Puedes borrar logs antiguos, copias de seguridad obsoletas o archivos temporales.
[WARNING] No borres archivos del sistema si no sabes qué son. Mejor consulta con tu proveedor.
Problema de permisos del directorio de datos
MySQL necesita permisos correctos en su directorio de datos. Si los permisos se han corrompido:
chown -R mysql:mysql /var/lib/mysql
chmod -R 755 /var/lib/mysql
Problema con el socket
Si el error menciona el socket, asegúrate de que el directorio existe:
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
Configuración de bind-address
Abre el archivo de configuración de MySQL:
nano /etc/mysql/my.cnf
O en MariaDB:
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Busca la línea bind-address. Si está configurada como 0.0.0.0, significa que escucha en todas las interfaces. Si solo quieres conexiones locales, debería ser 127.0.0.1. Si tu aplicación se conecta desde otro servidor, necesitas la IP correcta.
[INFO] Si tu aplicación está en el mismo servidor que la base de datos, lo más seguro es usar
127.0.0.1.
Solución 4: Aumentar el límite de conexiones
Si el error ocurre solo cuando hay mucho tráfico, es posible que estés llegando al límite de conexiones simultáneas.
- Abre el archivo de configuración.
- Busca la línea
max_connections. - Si no existe, añádela en la sección
[mysqld]:
max_connections = 500
[WARNING] No pongas un número excesivamente alto (más de 1000) si tu servidor no tiene suficiente RAM. Cada conexión consume memoria.
- Guarda el archivo y reinicia el servicio:
systemctl restart mysql
Solución 5: Comprobar el firewall (CSF o iptables)
A veces el firewall bloquea las conexiones al puerto 3306. Para verificar si el firewall está bloqueando:
iptables -L -n | grep 3306
Si ves una regla de bloqueo, necesitas permitir el acceso. Para abrir el puerto temporalmente:
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Si usas CSF (ConfigServer Security & Firewall):
csf -a IP_DEL_SERVIDOR
O para abrir el puerto:
csf --add 3306 tcp
[INFO] Solo abre el puerto 3306 si tu aplicación se conecta a la base de datos desde otro servidor. Para conexiones locales (misma máquina), no es necesario.
Solución 6: Reparar la base de datos dañada
Si el servicio arranca pero las tablas están corruptas, verás errores al conectarte. Para reparar tablas:
mysqlcheck -u root -p --auto-repair --check --all-databases
Te pedirá la contraseña de root de MySQL. Si no la recuerdas, puedes cambiar la contraseña de root de MySQL desde el panel de DirectAdmin en "MySQL Management".
Solución 7: Reiniciar el servidor completo
Si nada de lo anterior funciona, un reinicio completo del servidor puede resolver problemas de memoria o procesos colgados.
reboot
[WARNING] Un reinicio afecta a todos los sitios alojados en el servidor. Si tienes sitios en producción, intenta hacerlo en horas de bajo tráfico.
Prevención y buenas prácticas
Para evitar futuros errores de "connection refused", te recomiendo:
- Monitorizar el espacio en disco: Configura alertas cuando el disco esté al 80% de capacidad.
- Revisar los logs semanalmente: Así detectarás problemas antes de que se conviertan en caídas.
- Mantener MySQL actualizado: Las actualizaciones corrigen bugs y vulnerabilidades.
- Configurar un cron de auto-reparación: Un script que revise el estado de MySQL cada 5 minutos y lo reinicie si está caído.
- Optimizar las consultas: Si tu base de datos es lenta o se satura, optimiza las consultas SQL de tu aplicación.
Preguntas frecuentes (FAQ)
¿Qué hago si no tengo acceso SSH?
Si no tienes acceso SSH, contacta con tu proveedor de hosting y diles que tienes un error "connection refused" en MySQL. Ellos podrán reiniciar el servicio o diagnosticar el problema por ti.
¿El error "Connection refused" es lo mismo que "Access denied"?
No. "Access denied" significa que el servidor MySQL está funcionando pero rechaza tus credenciales. "Connection refused" significa que el servidor ni siquiera acepta la conexión.
¿Puedo solucionar esto desde el panel de DirectAdmin sin SSH?
Sí, puedes reiniciar el servicio desde el panel, pero no podrás ver los logs de error ni modificar la configuración. Para problemas simples, el panel es suficiente.
¿Cuánto tiempo tarda en solucionarse?
Si es un problema simple (servicio caído), con el reinicio desde el panel se soluciona en menos de 1 minuto. Si es un problema de configuración, puede llevarte de 15 a 30 minutos siguiendo esta guía.
¿Afecta este error a todos mis sitios web?
Sí, si todos tus sitios usan bases de datos en el mismo servidor MySQL, todos se verán afectados. Las páginas estáticas (HTML puro) seguirán funcionando.
Conclusión
El error "Connection refused" en bases de datos de DirectAdmin es frustrante pero casi siempre solucionable. El 80% de las veces se resuelve simplemente reiniciando el servicio MySQL desde el panel o por SSH. El resto de las veces, el problema está en la configuración, el firewall o el espacio en disco.
Recuerda que DirectAdmin es una herramienta muy completa, y su monitor de servicios te da pistas visuales sobre qué está fallando. Si después de seguir todos estos pasos el problema persiste, no dudes en contactar con tu proveedor de hosting, ya que puede ser un problema de hardware o de configuración a nivel de red.
[TIP] Guarda este artículo en tus favoritos. La próxima vez que veas "connection refused", ya sabrás exactamente qué hacer. Y si te ha sido útil, compártelo con otros administradores de servidores que puedan necesitarlo.
