Introducción al Error SQLSTATE[HY000] [2002]
El error SQLSTATE[HY000] [2002] Connection refused es uno de los problemas más comunes a los que se enfrentan los desarrolladores web al intentar conectar una aplicación (ya sea en PHP, Python, Node.js, etc.) con una base de datos MySQL o MariaDB. Este fallo interrumpe por completo la ejecución del software, impidiendo cualquier operación de lectura o escritura en el servidor de datos.
Causas Principales del Error
Entender por qué ocurre este fallo es fundamental para aplicar la solución adecuada. Las causas más frecuentes son:
- El servicio de MySQL o MariaDB no está en ejecución en el servidor local o remoto.
- La aplicación está intentando conectarse a través de un puerto incorrecto (por defecto es el 3306).
- El archivo de configuración (como
my.cnfomy.ini) tiene restringidas las conexiones externas mediante la directivabind-address. - Problemas con el archivo de socket de MySQL cuando se intenta la conexión local vía UNIX socket en lugar de TCP/IP.
Método 1: Verificar y Reiniciar el Servicio de MySQL
Lo primero que debes comprobar es si el motor de la base de datos realmente está encendido. Sigue estos pasos según tu sistema operativo en el servidor:
- Abre tu terminal con privilegios de administrador o usando
sudo. - Comprueba el estado actual del servicio ejecutando el comando:
sudo systemctl status mysql(omariadbsegún corresponda). - Si el servicio está detenido o inactivo, arráncalo con:
sudo systemctl start mysql. - Habilita el inicio automático al reiniciar el servidor con:
sudo systemctl enable mysql.
Método 2: Comprobar el Host y el Puerto de Conexión
A menudo, el error surge porque la aplicación busca la base de datos en la dirección incorrecta.
- Revisa tu archivo de configuración de entorno (por ejemplo,
.enven Laravel o tu archivoconfig.php). - Verifica que la variable
DB_HOSTesté configurada correctamente como127.0.0.1en lugar delocalhostpara forzar el uso del protocolo TCP/IP, o viceversa si usas sockets. - Asegúrate de que la variable
DB_PORTesté establecida en el puerto estándar3306o el puerto personalizado que hayas asignado.
Método 3: Modificar la Directiva bind-address en la Configuración
Si tu aplicación y la base de datos están en contenedores Docker o servidores separados, MySQL podría estar bloqueando conexiones externas.
- Abre el archivo de configuración principal de MySQL, usualmente ubicado en
/etc/mysql/mysql.conf.d/mysqld.cnf. - Busca la línea que contiene
bind-address = 127.0.0.1. - Coméntala o cámbiala por
0.0.0.0si necesitas permitir conexiones desde cualquier IP (asegúrate de proteger tu cortafuegos). - Guarda los cambios y reinicia MySQL con
sudo systemctl restart mysqlpara aplicar la nueva configuración.