Cómo solucionar el error 'mysqli_real_connect(): (HY000/1045): Access denied for user'
¿Qué significa este error y por qué aparece?
Si estás leyendo esto, es muy probable que hayas visto en tu pantalla un mensaje similar a este:
Warning: mysqli_real_connect(): (HY000/1045): Access denied for user 'usuario'@'localhost' (using password: YES)
No te preocupes, es uno de los errores más comunes en el mundo del hosting y las bases de datos. Vamos a explicarlo de forma sencilla.
El error 1045 mysql significa literalmente que el servidor de base de datos (MySQL o MariaDB) ha rechazado tu intento de conexión porque los datos de acceso no coinciden o el usuario no tiene permiso para conectarse desde ese lugar concreto.
Piensa en ello como cuando intentas entrar en tu casa con una llave equivocada o intentas abrir la puerta de un vecino con tu llave. El sistema te dice: "Lo siento, no tienes acceso".
Causas más frecuentes del error
- Contraseña incorrecta: El dato más común. Has cambiado la contraseña de la base de datos recientemente o la estás escribiendo mal.
- Usuario equivocado: Estás usando un usuario que no existe en esa base de datos concreta.
- Permisos insuficientes: El usuario existe, pero no tiene privilegios para conectarse desde esa IP o ese dominio.
- Archivo de configuración desactualizado: Tu sitio web (WordPress, por ejemplo) tiene guardadas las credenciales antiguas en su archivo de configuración.
- Base de datos errónea: A veces el usuario es correcto, pero la base de datos a la que intentas acceder no corresponde con ese usuario.
Antes de empezar: identifica el origen del problema
Para solucionar error 1045 de manera efectiva, necesitas saber si el problema está en:
- Tu panel de control de hosting (donde creas las bases de datos).
- Tu aplicación web (WordPress, PrestaShop, etc.).
- Tu conexión local (si estás usando un programa como MySQL Workbench).
Te recomiendo seguir estos pasos en orden, ya que son del más sencillo al más complejo.
Paso 1: Verifica las credenciales en tu panel de control
Lo primero es asegurarte de que los datos que crees tener son los correctos.
Para usuarios de Syspanel (antes conocido como HestiaCP)
Si tu hosting utiliza Syspanel, recuerda que el acceso al panel se realiza a través del puerto 2106 (por ejemplo: https://tu-dominio.com:2106).
Una vez dentro:
- Busca la sección "Bases de Datos" en el menú lateral.
- Verás una lista con todas tus bases de datos, el nombre del usuario asociado y un botón para "Cambiar contraseña".
- Si no recuerdas la contraseña, cámbiala y anótala en un lugar seguro.
Para otros paneles (cPanel, Plesk, etc.)
- En cPanel: Busca la sección "MySQL Databases" o "Bases de datos MySQL".
- En Plesk: Busca "Bases de datos" en el menú principal.
[TIP]
Asegúrate de que el nombre de la base de datos y el nombre del usuario están escritos exactamente igual que en el panel. A veces incluyen prefijos comotuusuario_basededatos.
Paso 2: Comprueba la conexión manualmente
Antes de tocar nada en tu web, vamos a comprobar si las credenciales funcionan desde el propio servidor.
Opción A: Usando la línea de comandos (SSH)
Si tienes acceso SSH, ejecuta:
mysql -u TU_USUARIO -p TU_BASE_DE_DATOS
Te pedirá la contraseña. Si la conexión es correcta, verás el prompt de MySQL. Si no, te mostrará el mismo error conexion mysql con el código 1045.
Opción B: Usando un archivo PHP de prueba
Crea un archivo llamado test.php y súbelo a la raíz de tu web. Pega este código:
<?php
$enlace = mysqli_connect("localhost", "TU_USUARIO", "TU_CONTRASEÑA", "TU_BASE_DE_DATOS");
if (!$enlace) {
die("Error de conexión: " . mysqli_connect_error());
}
echo "Conexión exitosa";
mysqli_close($enlace);
?>
Sustituye los datos por los tuyos y accede a tu-dominio.com/test.php desde el navegador.
- Si ves "Conexión exitosa", el problema está en tu aplicación.
- Si ves el mysqli_real_connect error, entonces las credenciales son incorrectas o hay un problema de permisos.
[WARNING]
Importante: elimina el archivotest.phpdespués de usarlo. Contiene información sensible de tu base de datos.
Paso 3: Actualiza la configuración de tu aplicación
Si las credenciales son correctas pero el error persiste, es que tu aplicación tiene guardados datos antiguos.
En WordPress
El archivo que debes revisar es wp-config.php, ubicado en la raíz de tu instalación. Busca estas líneas:
define('DB_NAME', 'nombre_base_datos');
define('DB_USER', 'nombre_usuario');
define('DB_PASSWORD', 'tu_contraseña');
define('DB_HOST', 'localhost');
Asegúrate de que coinciden con los datos reales. Si los has cambiado recientemente desde el panel, actualiza aquí también.
[INFO]
El campoDB_HOSTsuele serlocalhost, pero en algunos hostings puede ser una dirección IP o un hostname específico comomysql.tudominio.com. Revisa la documentación de tu proveedor.
En PrestaShop
El archivo es app/config/parameters.php (en versiones modernas). Busca las entradas database_user, database_password, database_name y database_host.
En otras aplicaciones
Generalmente, las credenciales de la base de datos se encuentran en:
- Un archivo
.enven la raíz. - Un archivo
config.phpoconfiguration.php. - Un archivo
settings.php.
Busca las variables que contienen DB_USER, DB_PASSWORD, DB_NAME o DB_HOST.
Paso 4: Verifica los permisos del usuario en la base de datos
A veces el usuario existe y la contraseña es correcta, pero no tiene permisos para conectarse desde ese host.
Desde Syspanel (puerto 2106)
- Accede a tu panel en
https://tu-dominio.com:2106. - Ve a "Bases de Datos".
- Haz clic en el icono de editar junto a la base de datos problemática.
- Verás el usuario asociado y los privilegios. Asegúrate de que tiene marcados los privilegios básicos como
SELECT,INSERT,UPDATE,DELETE, etc.
Desde phpMyAdmin
Si tu hosting te da acceso a phpMyAdmin:
- Selecciona la base de datos afectada.
- Ve a la pestaña "Privilegios".
- Edita el usuario y asegúrate de que tiene el host correcto (normalmente
localhosto%para cualquier host). - Marca la opción "Conceder todos los privilegios" y guarda.
[WARNING]
Si usas%como host, significa que el usuario puede conectarse desde cualquier lugar. Esto es menos seguro. Úsalo solo si es necesario.
Paso 5: Reinicia los servicios
A veces los cambios de permisos o contraseñas no se aplican hasta que se reinicia el servicio de MySQL.
Si tienes acceso SSH
sudo systemctl restart mysql
O en algunos sistemas:
sudo systemctl restart mariadb
Si no tienes acceso SSH
Contacta con tu proveedor de hosting para que reinicie el servicio. No te preocupes, es un proceso rápido y no afecta a tus datos.
Paso 6: Comprueba el puerto de conexión
En la mayoría de los casos, MySQL usa el puerto 3306. Pero algunos hostings configuran puertos alternativos por seguridad.
Si tu aplicación usa un hostname que no es localhost, verifica que el puerto sea el correcto. En la configuración de tu aplicación, puedes añadir el puerto así:
define('DB_HOST', 'localhost:3307');
[TIP]
Si no estás seguro del puerto, contacta con tu proveedor de hosting. Es un dato que suelen indicar en la documentación o en el panel de control.
Paso 7: Soluciones avanzadas para el error 1045 mysql
Si has llegado hasta aquí y el problema persiste, prueba estas opciones:
Opción 1: Crear un nuevo usuario
A veces es más fácil crear un nuevo usuario y asignarlo a la base de datos que arreglar los permisos del antiguo.
Opción 2: Restablecer la contraseña desde la línea de comandos
Si tienes acceso root a MySQL:
ALTER USER 'usuario'@'localhost' IDENTIFIED BY 'nueva_contraseña';
FLUSH PRIVILEGES;
Opción 3: Verificar si la base de datos existe
Puede que la base de datos haya sido eliminada por error. En phpMyAdmin o Syspanel, comprueba que la base de datos sigue existiendo.
Opción 4: Revisar los logs de error
Los logs de MySQL pueden darte más información. Normalmente están en:
/var/log/mysql/error.log/var/log/mariadb/mariadb.log
Si no puedes acceder, pide a tu proveedor que los revise.
Resumen rápido: checklist para solucionar el error
Aquí tienes una lista rápida para no perderte:
- ✅ Verifica las credenciales en el panel de control.
- ✅ Prueba la conexión manualmente con un script PHP.
- ✅ Actualiza el archivo de configuración de tu aplicación.
- ✅ Comprueba los permisos del usuario en la base de datos.
- ✅ Reinicia el servicio de MySQL.
- ✅ Verifica el puerto de conexión.
- ✅ Si todo falla, crea un usuario nuevo o contacta con soporte.
Preguntas frecuentes (FAQ)
¿Por qué me sale "Access denied for user" si estoy seguro de que la contraseña es correcta?
Puede que el usuario tenga configurado un host específico que no coincide con el lugar desde donde te conectas. Por ejemplo, si el usuario solo permite conexiones desde localhost y tú intentas conectar desde una IP remota.
¿Puedo evitar este error en el futuro?
Sí, te recomiendo:
- Guardar las contraseñas en un gestor de contraseñas.
- Actualizar siempre el archivo de configuración de tu web cuando cambies la contraseña.
- Hacer copias de seguridad periódicas de tus bases de datos.
¿Qué significa exactamente "(using password: YES)"?
Eso indica que tu aplicación está enviando una contraseña en el intento de conexión. Si dice (using password: NO), significa que está intentando conectar sin contraseña, lo cual también puede causar errores.
¿Debo cambiar todos los archivos de configuración si cambio la contraseña?
Sí, cualquier aplicación que utilice esa base de datos deberá actualizarse. Esto incluye WordPress, foros, tiendas online, etc.
Conclusión
El access denied for user mysql es un error frustrante pero muy común y casi siempre tiene una solución sencilla. La clave está en ir paso a paso, verificando cada elemento: credenciales, permisos y configuración.
Recuerda que en Syspanel (acceso por puerto 2106) puedes gestionar fácilmente tus bases de datos y usuarios. Y si en algún momento te sientes perdido, no dudes en contactar con el soporte técnico de tu hosting: están acostumbrados a resolver este tipo de problemas a diario.
[INFO]
Si has seguido todos los pasos y el error persiste, es posible que haya un problema a nivel de servidor que solo tu proveedor de hosting puede resolver. No te desesperes: envía un ticket con el mensaje de error exacto y el script que estás usando.
Espero que este artículo te haya sido de ayuda. ¡Buena suerte con tu base de datos!
