> Faqs > Solucionar error acceso a base de datos usando Sail Laravel al restaurar un proyecto

Solucionar error acceso a base de datos usando Sail Laravel al restaurar un proyecto

Se presenta un problema de acceso a la base de datos MariaDB (aunque pasaría también con MySQL) después de restaurar un proyecto en el que se usa Laravel Sail como entorno de desarrollo.

El error que aparece es el siguiente:

SQLSTATE[HY000] [1045] Access denied for user 'sail'@'172.29.0.5' (using password: YES) (SQL: select * from `users` where `email` = x@example.com limit 1)

Este proyecto se acaba de clonar con Git y se ha lanzado el comando "sail up" (./vendor/bin/sail up) para arrancarlo.

Ver solución más abajo...

Respuestas

El problema en mi caso se ha presentado porque, cuando se inició Sail por primera vez, no existía el archivo .env. No me acordé de crearlo según hice el clonado.

Por culpa de eso, la base de datos se ha creado con datos de usuario y contraseña que no corresponden con los que se intenta acceder cuando se incorporó más tarde el .env.

Primero muy importante, cuando cambias el archivo .env con los datos de la base de datos, necesitas borrar los volúmenes creados del contenedor de la base de datos, para que se puedan crear de nuevo las bases de datos con los datos del .env nuevos.

sail down -v

Luego podrás volver a arrancar los contenedores y se volverán a crear las bases de datos con los datos actualizados del .env.

sail up

Por supuesto, una vez has borrado los volúmenes de los contenedores, tendrás que volver a crear las tablas de la base de datos.

sail php artisan migrate

Y otro detalle que quiero señalar por si puede ser un problema para otras personas, aunque en mi caso no era este, es que cuando trabajas con Laravel Sail y cambias algún detalle del archivo de configuración de Docker, docker-compose.yml, debes ejecutar el build de las imágenes de los contenedores.

sail build --no-cache

Así se realiza el rebuild evitando que te pille cosas de la caché por lo que las imágenes estarán actualizadas y con los datos del docker-compose.yml. Luego puedes volver a arracar Sail ya con las imágenes frescas.

Revisa además la respuesta que nos han mandado un poco más abajo, la de Víctor, porque también te puede estar fallando el valor que tienes configurado en el .env que estás usando!! Sobre todo, revisa que el host de mysql sea "mysql" y no 127.0.0.1 que es lo que aparece en el .env de manera predeterminada. Además ponle un usuario diferente de root y un password.

Miguel Angel
3385 148 217 17

El problema en mi caso era un poco mayor todavía.

Tenía esto en el .env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=admin-panel
DB_USERNAME=root
DB_PASSWORD=

Esos datos venían dados por el .env.example que había en el proyecto al restaurarlo. Lo copié al .env y solamente modifiqué la contraseña.

Entonces el error que me aparecía era este:

 SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select table_name as name, (data_length + index_length) as size, table_comment as comment, engine as engine, table_collation as collation from information_schema.tables where table_schema = 'mejores_site' and table_type in ('BASE TABLE', 'SYSTEM VERSIONED') order by table_name)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:829

Ese error me salía a pesar de que los contenedores estaban bien iniciados, especialmente el de mysql no daba ningún problema, estaba arrancado y todo funcionando bien.

Luego me he dado cuenta que los valores del .env para que la base de datos funcione son un poco distintos, sobre todo por el host, que no puede ser la IP de localhost.

Cambiando el .env por estos valores ha funcionado:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=admin-panel
DB_USERNAME=sail
DB_PASSWORD=password

Solo recuerda después de cambiar estos valores del .env eliminar los volúmenes.

sail down -v
Victor
309 8 22 18