Cómo arreglar el error 'Access denied for user' en MySQL (PrestaShop y WordPress)
¿Qué significa el error "Access denied for user" en MySQL?
Si estás leyendo esto, probablemente te has encontrado con un mensaje de error similar a este:
ERROR 1045 (28000): Access denied for user 'usuario'@'localhost' (using password: YES)
O quizás algo como:
Access denied for user 'admin_prestashop'@'localhost' to database 'db_prestashop'
No te preocupes, es uno de los errores más comunes en entornos con PrestaShop y WordPress. Aunque el mensaje pueda parecer intimidante, la solución suele ser más sencilla de lo que imaginas. En este artículo te voy a explicar, paso a paso y sin tecnicismos innecesarios, cómo identificar la causa y arreglarlo.
El error access denied mysql ocurre cuando el servidor MySQL rechaza las credenciales que tu aplicación está utilizando para conectarse a la base de datos. Esto puede deberse a múltiples factores: una contraseña incorrecta, un usuario que no tiene permisos, un host mal configurado o incluso un problema con los privilegios después de una migración.
Causas más comunes del error "Access denied for user"
Antes de lanzarnos a solucionar el problema, es importante entender por qué ocurre. Estas son las causas más frecuentes:
- Contraseña incorrecta en el archivo de configuración de WordPress (
wp-config.php) o de PrestaShop (parameters.php). - Nombre de usuario incorrecto en la configuración.
- El usuario no tiene permisos para acceder a la base de datos específica.
- El host del usuario no coincide (por ejemplo, el usuario está definido para
localhostpero la conexión se hace desde127.0.0.1). - La base de datos no existe o tiene un nombre diferente al que se indica en la configuración.
- Cambios recientes en el servidor (migración, cambio de contraseña, restauración de copias de seguridad).
Primeros pasos: verifica la configuración de tu aplicación
Para WordPress
El archivo que contiene los datos de conexión a la base de datos es wp-config.php, que se encuentra en la raíz de tu instalación. Accede a él mediante FTP o el administrador de archivos de tu panel de hosting y 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');
Comprueba que estos cuatro valores son correctos. Un error muy común es que la contraseña contenga caracteres especiales que se hayan escapado incorrectamente. Si tienes dudas, restablece la contraseña desde tu panel de control.
Para PrestaShop
En PrestaShop, la configuración se encuentra en el archivo app/config/parameters.php. Busca algo similar a esto:
'database_host' => 'localhost',
'database_name' => 'nombre_base_datos',
'database_user' => 'nombre_usuario',
'database_password' => 'tu_contraseña',
Al igual que con WordPress, verifica que todos los datos son correctos y que la contraseña no tiene espacios o caracteres extraños.
Solución paso a paso para el error MySQL 1045
Si has verificado la configuración y el error persiste, sigue estos pasos en orden. No te saltes ninguno, ya que cada uno resuelve una causa distinta.
Paso 1: Accede a MySQL como administrador
Para poder arreglar el problema, necesitas acceder a MySQL con un usuario con privilegios de administrador (normalmente root). Esto puedes hacerlo desde:
- La terminal del servidor (si tienes acceso SSH).
- phpMyAdmin (si tu hosting lo incluye).
- El panel de control de tu hosting (como Syspanel, cuyo puerto de acceso es el 2106).
En la terminal, escribe:
mysql -u root -p
Te pedirá la contraseña de root. Si no la recuerdas, puedes restablecerla desde tu panel de hosting.
Paso 2: Identifica al usuario y sus privilegios
Una vez dentro de MySQL, ejecuta este comando para ver todos los usuarios existentes:
SELECT user, host FROM mysql.user;
Esto te mostrará una tabla con los usuarios y desde qué hosts pueden conectarse. Busca el usuario que tu aplicación está utilizando (por ejemplo, admin_wp o prestashop_user).
Si el usuario no aparece en la lista, significa que no existe y tendrás que crearlo. Si aparece, verifica el campo host. Debe coincidir con el host desde el que se conecta tu aplicación (normalmente localhost).
Paso 3: Restablece la contraseña del usuario
Este es el paso más común para resolver el error mysql access denied. Ejecuta el siguiente comando reemplazando 'usuario' y 'nueva_contraseña' con tus datos:
ALTER USER 'usuario'@'localhost' IDENTIFIED BY 'nueva_contraseña';
Si usas una versión anterior de MySQL, puede que necesites:
SET PASSWORD FOR 'usuario'@'localhost' = PASSWORD('nueva_contraseña');
Después, aplica los cambios con:
FLUSH PRIVILEGES;
[INFO] Si tu aplicación se conecta desde otro host (por ejemplo,
127.0.0.1o una IP específica), deberás cambiar'localhost'por ese host en el comando.
Paso 4: Otorga los privilegios necesarios
A veces el usuario existe y la contraseña es correcta, pero no tiene permisos sobre la base de datos. Para otorgar todos los privilegios sobre una base de datos concreta:
GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'usuario'@'localhost';
FLUSH PRIVILEGES;
[WARNING] No otorgues privilegios globales (como
GRANT ALL ON *.*) a menos que sea estrictamente necesario, ya que supone un riesgo de seguridad.
Paso 5: Verifica que la base de datos existe
Si el error persiste, comprueba que la base de datos existe:
SHOW DATABASES;
Si no aparece, tendrás que crearla:
CREATE DATABASE nombre_base_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Luego vuelve a asignar los privilegios al usuario sobre esa base de datos.
Soluciones específicas para WordPress
Si el problema es solo en WordPress, además de lo anterior, puedes probar estas soluciones:
Restablecer la contraseña desde wp-config.php
Añade temporalmente estas líneas al final de tu wp-config.php:
define('WP_ALLOW_REPAIR', true);
Luego visita tudominio.com/wp-admin/maint/repair.php y sigue las instrucciones. Después elimina esa línea.
Revisar el host de la base de datos
Algunos servidores usan localhost, otros 127.0.0.1 y otros un nombre de host específico como mysql.tudominio.com. Consulta con tu proveedor de hosting cuál es el correcto.
[TIP] Si tu hosting usa Syspanel, recuerda que el puerto de acceso es el 2106. Allí podrás ver los datos de conexión a tu base de datos.
Soluciones específicas para PrestaShop
Borrar la caché de configuración
PrestaShop guarda una caché de configuración que puede estar desactualizada. Elimina los archivos de la carpeta var/cache/ (o app/cache/ en versiones antiguas). Puedes hacerlo por FTP o desde el administrador de archivos.
Comprobar el archivo settings.inc.php (versiones antiguas)
Si usas PrestaShop 1.6 o anterior, la configuración está en config/settings.inc.php. Busca:
define('_DB_SERVER_', 'localhost');
define('_DB_NAME_', 'nombre_base_datos');
define('_DB_USER_', 'usuario');
define('_DB_PASSWD_', 'contraseña');
Y verifica que son correctos.
¿Qué hacer si nada de esto funciona?
Si has seguido todos los pasos y el error mysql access denied persiste, prueba lo siguiente:
- Reinicia el servicio MySQL desde tu panel de control o con el comando
systemctl restart mysql(en servidores Linux). - Comprueba los logs de MySQL en
/var/log/mysql/error.logpara obtener más detalles. - Contacta con tu proveedor de hosting. A veces hay restricciones a nivel de servidor que impiden la conexión.
[WARNING] No intentes modificar los archivos del sistema de MySQL si no sabes lo que haces. Podrías dejar la base de datos inservible.
Preguntas frecuentes (FAQ)
¿Por qué me aparece este error después de una migración?
Es muy común. Al mover tu sitio a otro servidor, los datos de conexión cambian. Asegúrate de actualizar wp-config.php o parameters.php con los nuevos datos.
¿Puedo usar un usuario de MySQL para varias bases de datos?
Sí, solo tienes que otorgar los privilegios correspondientes sobre cada base de datos:
GRANT ALL PRIVILEGES ON db1.* TO 'usuario'@'localhost';
GRANT ALL PRIVILEGES ON db2.* TO 'usuario'@'localhost';
¿Qué significa "using password: YES" en el error?
Significa que MySQL está rechazando la conexión con contraseña. Si ves "using password: NO", significa que la aplicación intenta conectarse sin contraseña, lo cual también puede causar problemas.
¿Es peligroso cambiar la contraseña de MySQL?
No, siempre que actualices también el archivo de configuración de tu aplicación. Eso sí, usa contraseñas seguras y no las compartas.
¿Puedo evitar este error en el futuro?
Sí, siguiendo estas buenas prácticas:
- Anota siempre los datos de conexión en un lugar seguro.
- Realiza copias de seguridad periódicas de tu base de datos.
- Antes de migrar, asegúrate de tener los nuevos datos de conexión a mano.
- Utiliza usuarios de MySQL específicos para cada aplicación, con permisos limitados.
Conclusión
El error access denied for user en MySQL es frustrante, pero casi siempre tiene solución. La clave está en verificar los datos de conexión, los permisos del usuario y el host desde el que se conecta. Con los pasos que te he dado, deberías poder resolverlo en pocos minutos.
Recuerda que si tu hosting utiliza Syspanel, el puerto de acceso es el 2106 para gestionar tus bases de datos y usuarios. Allí también podrás restablecer contraseñas y comprobar los privilegios sin necesidad de usar la línea de comandos.
Si el problema persiste, no dudes en contactar con el soporte técnico de tu hosting. A veces hay configuraciones especiales en el servidor que requieren intervención profesional.
Espero que este artículo te haya sido de ayuda. ¡Buena suerte con tu sitio web!
