Introducción
Uno de los problemas más frustrantes para los desarrolladores web que trabajan con PHP y bases de datos relacionales es encontrarse con el mensaje mysqli_connect(): (HY000/2002): Connection refused. Este fallo interrumpe por completo la comunicación entre tu aplicación backend y el servidor de MySQL, impidiendo que el sitio web cargue cualquier información dinámica.
Causas Principales del Error
El error de conexión rechazada suele estar relacionado con fallos de configuración en el servicio de base de datos, credenciales incorrectas o restricciones de red. Las causas más comunes incluyen:
- El servicio de MySQL/MariaDB se encuentra detenido o no se está ejecutando.
- La aplicación intenta conectarse a un host (por ejemplo,
localhostvs127.0.0.1) o puerto incorrecto. - Restricciones en el archivo de configuración de MySQL (
my.cnfomysqld.cnf) que bloquean las conexiones externas o locales. - Credenciales de acceso (usuario, contraseña) erróneas en el script de PHP.
Método 1: Verificar y Reiniciar el Servicio de MySQL
El primer paso y el más común para resolver este problema es asegurarte de que el servidor de base de datos esté activo. Sigue estos pasos en tu terminal (Linux/macOS):
- Abre tu terminal y comprueba el estado actual del servicio ejecutando el siguiente comando:
sudo systemctl status mysql - Si el servicio aparece como detenido o inactivo, inícialo inmediatamente con:
sudo systemctl start mysql - Para asegurarte de que se ejecute automáticamente tras reiniciar el sistema, habilítalo:
sudo systemctl enable mysql
Método 2: Comprobar el Host y las Credenciales en el Script PHP
Muchas veces el error ocurre porque PHP intenta buscar el servidor en un socket incorrecto. Cambiar de localhost a 127.0.0.1 suele solucionar este inconveniente de forma inmediata.
- Abre tu archivo de conexión en PHP (por ejemplo,
conexion.php). - Localiza la función de conexión, que suele tener este aspecto:
$conexion = mysqli_connect('localhost', 'usuario', 'password', 'base_datos'); - Modifica el primer parámetro de
'localhost'a'127.0.0.1'para forzar el uso del protocolo TCP/IP:$conexion = mysqli_connect('127.0.0.1', 'usuario', 'password', 'base_datos'); - Guarda los cambios y recarga la página en tu navegador web.
Método 3: Revisar el Archivo de Configuración de MySQL (bind-address)
Si tu servidor web y tu base de datos están en máquinas separadas, o si el servicio rechaza cualquier intento de conexión entrante, debes revisar la directiva bind-address.
- Abre el archivo de configuración de MySQL con un editor de texto con privilegios de root:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - Busca la línea que contiene
bind-address. Debería verse así:bind-address = 127.0.0.1 - Si necesitas permitir conexiones desde cualquier IP (solo recomendado en entornos de desarrollo controlados), puedes comentarla o cambiarla por
0.0.0.0. - Guarda el archivo y reinicia MySQL para aplicar los cambios:
sudo systemctl restart mysql