Tal vez uno de los errores más comunes del motor de base de datos MySQL es aquel que dice algo como lo siguiente:
Error 1045: Access denied for user ‘usuario’@’host’ (using password: YES)
Este error puede ser causado desde la CLI, o al conectarnos desde un lenguaje de programación. Así que hoy veremos la solución a este problema, la cual, la mayoría de veces es escribir correctamente la contraseña y el usuario.
Aunque no todo es así de fácil, ya que a veces hay errores muy específicos que dependen del lenguaje, sistema operativo o versión de servidor. En este post veremos la mayoría de soluciones, pero si no queda, puedes comentar.
Antes de todo
Si no sabes de MySQL, mira cómo administrarlo desde la CLI. También te invito a ver cómo crear usuarios en MySQL y darles permiso.
Solución 1: escribe correctamente el usuario y la contraseña
Seguramente tú crees que lo estás haciendo correctamente pero puede que no. Verifica muchas veces que el usuario y la contraseña sean correctos. A veces incluso un espacio o mayúscula hacen la diferencia. Por ejemplo, no es lo mismo usar la contraseña hunter2 que usar la que es Hunter2.
Igualmente verifica que tu teclado tenga la distribución correcta. Por ejemplo, supongamos que la contraseña lleva la letra ñ pero tu teclado está configurado de tal manera que al escribirla se escribe otra letra; y como la mayoría de veces, cuando se pide la contraseña no se muestra nada, puedes estar escribiéndola mal.
Finalmente, mejor copia y pega los valores; pero cópialos de un editor de texto plano; si los copias de otro lugar a veces se van con todo y espacios.
Solución 2: quita el arroba de la contraseña
En algunos lenguajes de programación se usa el símbolo de arroba @
para separar el host del usuario y la contraseña. La cadena se ve algo así:
usuario:pass@tcp(host:puerto)/nombreBD
El problema es cuando ponemos el símbolo del arroba; si estamos concatenando entonces habrá un error ya que tomará el host como lo que hay después del arroba; creando conflictos.
¿Mi recomendación? quita el arroba de las contraseñas. Eso sí, utiliza contraseñas largas y seguras, pero sin ese símbolo. O también puedes leer la documentación del driver que uses y ver si hay alguna forma de enviar la cadena codificada.
Solución 3: no uses root
Esto me pasó a mí recientemente. Desde el lenguaje de programación Go me estaba intentando conectar a MySQL con el usuario root
para hacer unas pruebas locales; había problemas así que mejor hice un nuevo usuario, le di permisos y todo funcionó de maravilla.
Esto es debido a que a veces el usuario root no usa la autenticación nativa, sino la que es a través del socket; sobre todo en sistemas de Linux.
Solución 4: si estás desde un lenguaje de programación, mejor inténtalo desde la CLI
De tanto programar, a veces nos confundimos. Si algo no te sale, primero intenta loguearte desde la CLI con las credenciales que estás usando en el lenguaje de programación.
Solución 5: cambia el host
En algunos casos, no conecta a localhost
pero sí a 127.0.0.1
; o viceversa. Así que puedes probar cambiando el host; eso sí, cuando te conectas a otras IP’s debes verificar que la conexión remota esté permitida; ya que a veces, por seguridad, sólo se aceptan conexiones locales.
Más soluciones
Si sigues teniendo el error 1045 puedes dejar un comentario con tu problema y posible solución en caso de que la hayas encontrado; eso sí, recuerda primero probar todas las soluciones posibles.
No he podido solucionar mi problema, yo estoy tratando de instalar un script php y me sale este error y nada
Excelente blog, te filicito. Aunque ninguna de tus soluciones me funciono, mi problema era que tenia 2 instancias de MySql y me faltaba especificar el puerto, asi: “…; port=3390”