Introducción
El error de conexión mysqli_connect(): (HY000/2002): Connection refused es uno de los problemas más comunes a los que nos enfrentamos los desarrolladores web al trabajar con PHP y bases de datos MySQL o MariaDB. Este fallo interrumpe por completo la comunicación entre tu script backend y el servidor de base de datos, impidiendo que la aplicación web cargue cualquier tipo de información dinámica.
Causas Principales del Error
Existen diversos motivos por los cuales el servidor rechaza la conexión desde PHP:
- El servicio de MySQL o MariaDB se encuentra detenido o no está activo en el servidor.
- Estás intentando conectar mediante una dirección IP incorrecta o el puerto predeterminado (3306) ha sido modificado.
- El archivo de configuración
my.cnfomy.inibloquea las conexiones externas o de red local mediante la directivabind-address. - Credenciales de acceso incorrectas (usuario, contraseña o host no autorizados en la base de datos).
Método 1: Verificar y Reiniciar el Servicio de MySQL / MariaDB
Lo primero que debes comprobar es si el motor de base de datos está ejecutándose correctamente en tu entorno local o servidor de producción.
- Abre tu terminal SSH o línea de comandos con privilegios de administrador.
- Ejecuta el siguiente comando para comprobar el estado del servicio en sistemas basados en Linux (Ubuntu/Debian):
sudo systemctl status mysql - Si el servicio está detenido, inícialo con el comando:
sudo systemctl start mysql - Para asegurarte de que se mantenga activo tras reiniciar el servidor, habilítalo:
sudo systemctl enable mysql
Método 2: Revisar la Directiva Bind-Address en la Configuración
Si el servicio está activo pero sigues recibiendo el error de rechazo, es muy probable que MySQL esté configurado para escuchar únicamente peticiones locales (localhost) y tu script intente conectar mediante 127.0.0.1 o viceversa.
- Localiza el archivo de configuración de MySQL. En sistemas Linux suele encontrarse en
/etc/mysql/mysql.conf.d/mysqld.cnfo/etc/my.cnf. - Ábrelo con tu editor de texto favorito (por ejemplo, Nano):
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 externas, puedes cambiarlo temporalmente por
0.0.0.0o asegurarte de que apunte correctamente a127.0.0.1si PHP y MySQL residen en la misma máquina. - Guarda los cambios y reinicia el servidor MySQL:
sudo systemctl restart mysql
Método 3: Validar los Parámetros de Conexión en PHP
A veces el error proviene simplemente de un parámetro mal escrito en la función de conexión de PHP. Asegúrate de pasar correctamente los argumentos: servidor, usuario, contraseña y base de datos.
Ejemplo de código correcto para conexión con MySQLi:
$conexion = mysqli_connect('127.0.0.1', 'usuario_db', 'password_db', 'nombre_db', 3306);
if (!$conexion) {
die('Error de depuración: ' . mysqli_connect_error());
}
echo '¡Conexión exitosa!';Verifica que el puerto 3306 esté abierto y que ningún firewall de tu servidor (como UFW o iptables) esté bloqueando el tráfico interno entre PHP y el gestor de base de datos.