Introducción al Error SQLSTATE[HY000] [2002]
Durante el desarrollo de aplicaciones web con PHP, Node.js o Python que interactúan con sistemas de gestión de bases de datos relacionales como MySQL o MariaDB, es común encontrarse con el temido error SQLSTATE[HY000] [2002]: Connection refused. Este fallo interrumpe por completo la ejecución del programa, impidiendo que la aplicación pueda comunicarse con el servidor de la base de datos para recuperar o almacenar información esencial.
Principales Causas del Error de Conexión
Comprender el origen del problema es fundamental para aplicar la solución correcta. Las causas más frecuentes de este código de error incluyen:
- El servicio de MySQL o MariaDB no está ejecutándose en el servidor local o remoto.
- Credenciales incorrectas o configuración errónea en el archivo de entorno (como
.envoconfig.php) especificando un puerto o host equivocado. - El servidor de base de datos está configurado para no aceptar conexiones externas o el puerto estándar (3306) está bloqueado por un firewall.
- Problemas con el socket de conexión local en sistemas operativos basados en Unix/Linux.
Método 1: Verificar y Reiniciar el Servicio de MySQL o MariaDB
La causa más común es que el motor de base de datos esté detenido. Sigue estos pasos para verificar su estado y reiniciarlo:
- Abre tu terminal de comandos en Linux o macOS (o la terminal como Administrador en Windows).
- Ejecuta el siguiente comando para comprobar si el servicio está activo:
sudo systemctl status mysql(en sistemas basados en Debian/Ubuntu) osudo systemctl status mariadb. - Si el servicio aparece como detenido o inactivo, inícalo ejecutando:
sudo systemctl start mysql. - Para asegurarte de que se mantenga activo tras reiniciar el equipo, habilítalo con:
sudo systemctl enable mysql.
Método 2: Comprobar el Host y el Puerto en la Configuración
A veces, la aplicación intenta conectarse a una dirección IP o puerto incorrectos. Realiza las siguientes comprobaciones:
- Abre el archivo de configuración de tu entorno de desarrollo (por ejemplo, el archivo
.enven Laravel o tu archivo de conexión PDO). - Verifica la variable
DB_HOST. Si tu base de datos corre en la misma máquina, asegúrate de que esté configurada como127.0.0.1en lugar delocalhostpara forzar el uso de TCP/IP, o viceversa según tu stack. - Revisa la variable
DB_PORTy confirma que coincida con el puerto en el que escucha tu servidor MySQL (por defecto es3306). - Guarda los cambios y limpia la caché de configuración de tu framework si es necesario (ej:
php artisan config:clear).
Método 3: Revisar los Permisos del Archivo Socket en Linux
Si estás en un entorno de desarrollo local Linux y utilizas conexiones por socket local, los permisos restrictivos pueden generar este fallo:
- Localiza la ruta del archivo socket de MySQL, usualmente ubicado en
/var/run/mysqld/mysqld.sock. - Verifica que el usuario con el que ejecutas tu servidor web (por ejemplo,
www-data) tenga permisos de lectura y escritura sobre dicho directorio. - Reinicia tanto el servidor web (Apache o Nginx) como el servicio de base de datos para aplicar los cambios correctamente.