Cómo solucionar el error 'Can't connect to MySQL server' en DirectAdmin
¡Hola! Soy tu técnico de soporte amigable. Entiendo que ver el mensaje "Can't connect to MySQL server" en tu panel DirectAdmin puede ser frustrante, sobre todo si tienes una tienda online, un blog o cualquier sitio web que dependa de bases de datos. No te preocupes, este error es bastante común y, por lo general, tiene solución en pocos minutos.
En esta guía completa, te explicaré paso a paso cómo solucionar el error 'Can't connect to MySQL server' en DirectAdmin. Vamos a desglosar las causas más frecuentes, desde problemas de servicio caído hasta configuraciones de firewall o archivos corruptos. Al final, tendrás un listado de preguntas frecuentes (FAQ) para resolver dudas rápidas.
¿Qué significa exactamente este error?
Cuando tu sitio web o aplicación intenta comunicarse con la base de datos MySQL (o MariaDB, su variante más moderna), el servidor de bases de datos debe estar activo y accesible. El mensaje "Can't connect to MySQL server" indica que esa conexión falló. Las causas pueden ser:
- El servicio MySQL no está corriendo.
- El puerto de conexión (por defecto 3306) está bloqueado por un firewall.
- Los archivos de configuración o datos de MySQL están dañados.
- Hay un problema de permisos o de espacio en disco.
- El servidor está sobrecargado o se ha quedado sin memoria.
Vamos a atacar cada una de estas posibilidades de forma ordenada y segura.
Paso 1: Verificar el estado del servicio MySQL desde DirectAdmin
Lo primero y más sencillo es comprobar si el servicio de base de datos está activo. DirectAdmin tiene una sección específica para ello.
Accede al panel de servicios
- Inicia sesión en tu DirectAdmin como administrador (usuario
admino un usuario con nivel de reseller). - Ve al menú principal y busca la opción "Servicios del sistema" o "System Services" (depende del idioma).
- Busca en la lista "MySQL" o "MariaDB". Verás un indicador de estado (generalmente un círculo verde si está activo, rojo si está detenido).
[INFO] Si el servicio aparece como detenido (rojo), haz clic en el botón "Iniciar" o "Start" que aparece al lado. Espera unos segundos y recarga la página. Luego, vuelve a intentar la conexión desde tu sitio web.
Si el servicio no se inicia o se detiene inmediatamente, pasa al siguiente paso.
Paso 2: Acceso por SSH para diagnóstico avanzado
Si no puedes iniciar el servicio desde el panel, necesitarás acceder al servidor por SSH (terminal). Si no sabes cómo hacerlo, contacta con tu proveedor de hosting o pide a tu administrador que te dé acceso.
Comandos básicos para comprobar el servicio
Una vez conectado por SSH, ejecuta estos comandos:
# Para sistemas con systemd (la mayoría de distribuciones modernas)
systemctl status mysql
# o
systemctl status mariadb
# Para sistemas más antiguos (SysV init)
service mysql status
La salida te dirá si el servicio está active (running) o inactive (dead). Si está muerto, intenta arrancarlo:
systemctl start mysql
# o
service mysql start
[WARNING] Si aparece un error como "Failed to start mysql.service: Unit not found", es posible que MySQL no esté instalado o que el nombre del servicio sea diferente (por ejemplo,
mysqld). Prueba consystemctl list-units | grep mysqlpara encontrarlo.
Paso 3: Revisar los logs de error de MySQL
Si el servicio no arranca, los logs te darán la pista clave. Los archivos de log suelen estar en:
/var/log/mysql/error.log/var/log/mariadb/mariadb.log/var/log/mysqld.log
Puedes leerlos con:
tail -f /var/log/mysql/error.log
Busca palabras como "Can't start server", "corrupt", "disk full" o "permission denied". Algunos errores comunes y sus soluciones:
Error: "Table 'mysql.user' is marked as crashed"
Esto indica que las tablas del sistema de MySQL están dañadas. Para repararlas:
# Detén el servicio si está en ejecución
systemctl stop mysql
# Inicia MySQL en modo de recuperación de emergencia
mysqld_safe --skip-grant-tables &
# Conéctate a MySQL sin contraseña
mysql -u root
# Dentro de MySQL, repara las tablas del sistema
mysql> REPAIR TABLE mysql.user;
mysql> REPAIR TABLE mysql.db;
mysql> REPAIR TABLE mysql.tables_priv;
mysql> REPAIR TABLE mysql.columns_priv;
# Sal de MySQL
mysql> exit;
# Detén el proceso de mysqld_safe (puede ser con kill)
pkill mysqld
# Inicia el servicio normalmente
systemctl start mysql
Error: "InnoDB: Database corruption"
Si el motor InnoDB está corrupto, puedes intentar forzar la recuperación. Edita el archivo de configuración /etc/mysql/my.cnf (o /etc/my.cnf) y añade al final:
[mysqld]
innodb_force_recovery = 1
Luego reinicia MySQL. Si sigue fallando, prueba con valores 2, 3, 4, 5 o 6 (cada nivel es más agresivo). Una vez que puedas acceder, haz una copia de seguridad de tus bases de datos con mysqldump y luego restaura el valor a 0.
[TIP] No te olvides de quitar la línea
innodb_force_recoverydespués de recuperar los datos, o MySQL se iniciará siempre en modo limitado.
Paso 4: Comprobar el espacio en disco y la memoria
A veces el error de conexión es porque el disco está lleno o la RAM se ha agotado. Verifica con:
df -h
free -m
Si el disco está al 100%, libera espacio eliminando logs viejos, archivos temporales o contacta con tu proveedor para ampliar almacenamiento. Si la memoria está baja, puede que MySQL se haya detenido por el OOM Killer (Out Of Memory Killer). En ese caso, reinicia el servidor o ajusta los parámetros de memoria de MySQL en my.cnf.
Paso 5: Verificar el firewall y el puerto 3306
Aunque el servicio esté activo, si el firewall bloquea el puerto 3306, no podrás conectar. En DirectAdmin, el firewall suele ser CSF (ConfigServer Security & Firewall).
Desde el panel DirectAdmin
- Ve a "Plugins" > "ConfigServer Security & Firewall".
- En la pestaña "Firewall Allow", asegúrate de que el puerto 3306 está en la lista de "TCP_IN".
- Si no está, añádelo y haz clic en "Restart csf+lfd".
Desde SSH
# Verifica si el puerto está abierto
iptables -L -n | grep 3306
# Si no aparece, añádelo (ejemplo con CSF)
csf -a 3306
csf -r
[WARNING] Si tu base de datos solo debe ser accesible desde el mismo servidor (localhost), no necesitas abrir el puerto externamente. En ese caso, asegúrate de que en la configuración de tu aplicación la conexión sea a
127.0.0.1olocalhost.
Paso 6: Verificar la configuración de conexión en tu aplicación
A veces el problema no está en el servidor, sino en los datos de conexión que usas en tu script (PHP, WordPress, etc.). Revisa:
- Host: ¿Está usando
localhosto127.0.0.1? A veces el hostname del servidor no resuelve bien. - Puerto: Por defecto es 3306. Si lo cambiaste, asegúrate de que coincida.
- Usuario y contraseña: Verifica que el usuario de la base de datos existe y tiene permisos. Puedes comprobarlo desde DirectAdmin en "MySQL Management" > "Manage Users".
Si todo parece correcto, prueba a conectar manualmente desde la línea de comandos:
mysql -u tu_usuario -p -h localhost
Si te pide contraseña y accedes, entonces el problema está en tu aplicación. Revisa el archivo de configuración (por ejemplo, wp-config.php en WordPress).
Paso 7: Solucionar problemas de permisos de archivos
MySQL necesita permisos de lectura/escritura en sus directorios de datos. Si por error cambiaste permisos, puede fallar. Los directorios típicos son:
/var/lib/mysql//var/lib/mysql-files//var/log/mysql/
Verifica que el usuario mysql sea el propietario:
chown -R mysql:mysql /var/lib/mysql/
chown -R mysql:mysql /var/log/mysql/
Luego reinicia el servicio.
Paso 8: Reinstalar o actualizar MySQL (último recurso)
Si después de todo lo anterior el error persiste, puede que la instalación de MySQL esté corrupta. En ese caso, lo mejor es reinstalarlo, pero ten mucho cuidado: esto puede borrar bases de datos si no haces una copia de seguridad.
Copia de seguridad de todas las bases de datos
mysqldump --all-databases -u root -p > /root/backup_all.sql
Reinstalación en sistemas basados en Debian/Ubuntu
apt-get remove --purge mysql-server mysql-client mysql-common
apt-get autoremove
apt-get autoclean
apt-get install mysql-server mysql-client
Después de reinstalar, restaura la copia de seguridad:
mysql -u root -p < /root/backup_all.sql
[WARNING] Este paso debe hacerse con mucho cuidado. Si no te sientes seguro, pide ayuda a tu proveedor de hosting o a un administrador de sistemas.
Preguntas frecuentes (FAQ)
1. ¿El error "Can't connect to MySQL server" puede deberse a un ataque DDoS?
Sí, si el servidor recibe muchas conexiones, MySQL puede colapsar. Revisa los logs de acceso y considera limitar conexiones simultáneas.
2. ¿Qué hago si uso Syspanel (HestiaCP) en lugar de DirectAdmin?
Si usas Syspanel (llamado así en este artículo, anteriormente HestiaCP), el proceso es similar. Accede al panel por el puerto 2106 (ejemplo: https://tudominio.com:2106). Luego ve a "Servicios" y busca MySQL. Los pasos de SSH son idénticos.
3. ¿Puedo cambiar el puerto de MySQL para evitar conflictos?
Sí, pero no es recomendable a menos que sepas lo que haces. Edita /etc/mysql/my.cnf y cambia la línea port = 3306 por otro número, luego reinicia el servicio y actualiza todas tus aplicaciones.
4. ¿El error aparece solo en algunas aplicaciones?
Si solo falla una aplicación, revisa su configuración de conexión. Si fallan todas, el problema es global (servicio caído, firewall, etc.).
5. ¿Cómo puedo evitar este error en el futuro?
- Monitorea el espacio en disco y la memoria.
- Programa copias de seguridad periódicas de las bases de datos.
- Mantén MySQL actualizado.
- Configura alertas en DirectAdmin para que te avise si un servicio se detiene.
Conclusión
El error "Can't connect to MySQL server" en DirectAdmin tiene solución en la mayoría de los casos siguiendo estos pasos: verificar el servicio, revisar logs, comprobar espacio y permisos, y ajustar el firewall. Recuerda siempre hacer copias de seguridad antes de realizar cambios drásticos.
Si después de todo el problema persiste, no dudes en contactar con tu proveedor de hosting. Ellos tienen acceso directo al servidor y pueden diagnosticar problemas más profundos.
Espero que esta guía te haya sido de gran ayuda. ¡Tu sitio web volverá a funcionar en poco tiempo!
[TIP] Guarda este artículo como referencia. Si tienes alguna otra duda, escríbeme y con gusto te ayudaré.
