Acceso denegado para el usuario 'homestead' @ 'localhost' (utilizando contraseña: SÍ)

165

Estoy en un Mac OS Yosemite usando Laravel 5.0.

Mientras estoy en mi entorno local , php artisan migratesigo obteniendo:

Acceso denegado para el usuario 'homestead' @ 'localhost' (utilizando contraseña: SÍ)

Configuración

Aquí está mi .env

APP_ENV=local
APP_DEBUG=true
APP_KEY=*****

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

app \ config \ database.php

   'mysql'       => [
    'driver'      => 'mysql',
    'host'        => env('DB_HOST', 'localhost'),
    'database'    => env('DB_DATABASE', 'homestead'),
    'username'    => env('DB_USERNAME', 'homestead'),
    'password'    => env('DB_PASSWORD', 'secret'),
    'unix_socket' => '/tmp/mysql.sock',
    'charset'     => 'utf8',
    'collation'   => 'utf8_unicode_ci',
    'prefix'      => '',
    'strict'      => false,
    ]

¿Cómo evito este tipo de error?

He intentado :


1

en app / database.php

Reemplazar localhostcon127.0.0.1

'host'=> env('DB_HOST', 'localhost') ->'host' => env('DB_HOST', '127.0.0.1')

Además, en .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Intenta especificar el entorno

php artisan migrate --env=local


3

Verifique si MySQL se ejecuta por ejecución

mysqladmin -u homestead -p status Enter password: secret

tengo

Uptime: 21281 Threads: 3 Questions: 274 Slow queries: 0 Opens: 327 Flush tables: 1 Open tables: 80 Queries per second avg: 0.012

Lo que significa que está funcionando.


4 4

Compruebe MySQL UNIX Socket ( este paso funciona para mí )

cyber8200
fuente
1
la mejor práctica sería asegurar que la cuenta realmente exista en mysql ... "Encontré esta llave en la calle, y no funciona en la cerradura de mi puerta principal. ¿Cómo puedo cambiar la cerradura para que la llave funcione?"
Marc B
1
¿Supongo que estás usando la máquina virtual de la granja? He descubierto que solo funcionará cuando estés en la VM. puedes acceder a él a través de ssh [email protected] -p 2222. mi máquina predeterminada no tiene la ramita que dice que db se está ejecutando.
Jay Edwards

Respuestas:

254

La razón del acceso denegado para el error del usuario 'homestead' @ 'localhost' laravel 5 es el problema de almacenamiento en caché del archivo .env.php porque Laravel 5 está utilizando una configuración basada en el entorno en su archivo .env.

1 . Vaya al directorio raíz de su aplicación y abra el archivo .env (en ubuntu puede estar oculto, así que presione ctrl+ hpara mostrar los archivos ocultos y si está en la terminal, escriba: ls -apara mostrar los archivos ocultos) en su editor y cambie la configuración de la base de datos. luego guarde su archivo .env

DB_HOST=localhost
DB_DATABASE=laravelu
DB_USERNAME=root
DB_PASSWORD=''

2 . luego reinicie su servidor apache / servidor web. y actualiza tu página y has terminado

3 . Si todavía se produce un problema, intente ejecutar el siguiente comando para borrar el archivo de caché de configuración anterior.

php artisan config:clear

Ahora ya has terminado con el error

Abdou Tahiri
fuente
1
Trabajé para mí, gracias, una pregunta por la que tenemos que configurar nuestros datos de base de datos en el archivo .env como lo hacemos en el archivo database.php
Dipen
1
tal vez necesito entorno múltiple, producción y local.
Abdou Tahiri
55
Seguí intentando reiniciar Apache cuando estaba usando "php artisan serve" todo el tiempo, te sugiero que no cometas el mismo error que yo> <
Carlton
1
No funciona, y ahora obtengo PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Negro
1
Traté de cambiar .envy config:clear cache:cleartodos los comandos, reinicié apachepero sigo teniendo el mismo problema.
Luzan Baral
67

TLDR: debe detener el servidor Ctrl+ cy comenzar de nuevo utilizandophp artisan serve


Detalles:

Si está utilizando Laravel, y ya ha iniciado el servidor de desarrollo local por php artisan serve

Y después de que el servidor anterior ya se esté ejecutando, cambia las cosas relacionadas con el servidor de la base de datos en el archivo .env. Como pasar de MySQL a SQLite o algo así. Debe asegurarse de detener el proceso anterior, es decir, Ctrcl Co cualquier cosa que detenga el proceso. Y luego reinicie Artisan Serve nuevamente, es decir, y php artisan serveactualice su navegador y se solucionará su problema relacionado con la base de datos. Esto es lo que funcionó para mí para Laravel 5.3

Mohsin
fuente
Dios mío, esto funcionó para mí, gracias. pero, ¿cómo puedo detenerme cuando hay cambios en el entorno? ¿Hay alguna herramienta? esta es una buena experiencia
saber tabatabaee yazdi
31

Dos formas de resolverlo

Primera forma (no recomendado)

Abra el archivo de configuración de su base de datos (raíz_laravel / config / database.php) y busque el siguiente bloque de código.

        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'blog'),
        'username'  => env('DB_USERNAME', 'root'),
        'password'  => env('DB_PASSWORD', ''),

Cambie el bloque de código de la siguiente manera

        'host'      => 'yourHostName',
        'database'  => 'YourDatabastName',
        'username'  => 'YoutDatabaseUsername',
        'password'  => 'YourDatabasePassword',

Segunda forma (Recomendado por Laravel)

Verifique su raíz de Laravel, allí tiene un archivo llamado .env si no existe, busque .env.example, ¡cópielo / renómbrelo como .env después de eso, el archivo se ve mal!

APP_ENV=local
APP_DEBUG=true
APP_KEY=someRandomNumber

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Modifique el siguiente bloque de la siguiente manera

DB_HOST=yourHostName
DB_DATABASE=yourDatabaseName
DB_USERNAME=yourDatabaseUsername
DB_PASSWORD=youPassword

Ahora funcionará bien.

absiddiqueLive
fuente
1
¿Cuál es el punto de este archivo? Esta información está en root/config/database.phpparece redundante.
Halter
La dosis de información no es redundante, está utilizando la función env para leer el valor del archivo .env para proteger la información del servidor.
absiddiqueLive
¿Cómo encuentra o crea su nombre de host, nombre de base de datos, nombre de usuario y contraseña con Homestead?
Connor Leech
21

si está utilizando php artisan migrateNO desde el cuadro vagabundo pero desde la máquina host, entonces debe definir dentro del.env la ip del cuadro192.168.10.10

y, obviamente, establecer permiso para alojar al usuario desde su ip algo así como

grant all privileges on *.* to 'homestead'@% identified by 'secret';

en .envarchivo

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead
wdog
fuente
No pude hacer que eso funcionara, pero grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';funcionó para mí.
Ryan
21

Si está utilizando el servidor web predeterminado de PHP (por ejemplo php artisan serve), debe reiniciar su servidor después de cambiar los valores de su archivo .env.

Vrushal Raut
fuente
11

Cuando instala Homestead, esto crea una base de datos "homestead" predeterminada en la VM. Debe SSH en la VM homestead sshy ejecutar sus migraciones desde allí. Si trabaja localmente sin VM, deberá crear su base de datos manualmente. Por defecto, la base de datos debe llamarse homestead, el nombre de usuario es homestead y la contraseña es secreta.

revise este hilo en laracasts o esta publicación de blog para más detalles


si vas a

[PDOException] SQLSTATE[HY000] [2002] No such file or directory

intente cambiar "host" en el archivo /app/config/database.php de "localhost" a "127.0.0.1". Puede encontrar más detalles y otras soluciones aquí en este hilo .

Compruebe también si ha especificado la correcta unix_socket. revisa este hilo .

Sojan V Jose
fuente
@ rangerover.js intente cambiar "host" en el archivo /app/config/database.php de "localhost" a "127.0.0.1"
Sojan V Jose
@ rangerover.js revise este hilo stackoverflow.com/questions/20723803/… . Ver cualquiera de las soluciones importa.
Sojan V Jose
@ rangerover.js también verifica si el servicio mysql se está ejecutando :)
Sojan V Jose
@ rangerover.js puede verificar su unix_socket? stackoverflow.com/a/25649930/939299
Sojan V Jose
1
Finalmente funciona en el cuarto intento. Elimine todos sus comentarios e incluya este enlace stackoverflow.com/a/25649930/939299 como parte de su respuesta porque me ayuda.
cyber8200
11

Compruebe MySQL UNIX Socket

Encuentra la ubicación de unix_socket usando MySQL

mysql -u homestead -p

mysql> show variables like '%sock%';
+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | 322                         |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+
3 rows in set (0.00 sec)

Luego voy a config / database.php

Actualizo esta línea: 'unix_socket' => '/tmp/mysql.sock',

a : 'unix_socket' => '/var/run/mysqld/mysqld.sock',

Eso es. Funciona para mi como mi cuarto intento. Espero que estos pasos ayuden a alguien. :RE

cyber8200
fuente
Vaya, que me salvó:)
Petar Vasilev
11

Tuve el mismo problema y al final resultó que solo tenía que reiniciar el servidor y comenzar de nuevo

Ctrl+ centonces

php artisan serve
código511788465541441
fuente
9

En PC con Windows, siga a continuación.


  1. Acceda a la carpeta raíz de su aplicación.

  2. Edite el archivo .env

Acceda a la carpeta raíz de su aplicación

Edite el archivo .env

Edite el resaltado y cambie el nombre de usuario y la contraseña y el nombre de la base de datos en consecuencia.

Fred Ondieki
fuente
9

en mi caso, después de reiniciar mi servidor, el problema desapareció.

salga / cierre el comando "php artisan serve" y

vuelva a ejecutar el comando "php artisan serve" .

sh6210
fuente
8

Algún día en el futuro. Intenta borrar tu configuración primero

php artisan config:clear. 

Cierre todas las ventanas de terminal / cmd y luego reinicie terminal / CMD y esto debería eliminar el mensaje de error. A ver si funciona.

Krishneil
fuente
muchas gracias, esto me funcionó. No sé por qué ocurrió este error. acabo de cerrar todo y recargar y ejecutar php artisan config: clear
saber tabatabaee yazdi
6

después de config db reinicie el:

 php artisan serve

Si el servicio está activo antes de configurar db config.

A1Gard
fuente
5

estoy usando laravel 5. * Supongo que tengo una llamada de archivo .enven la raíz del proyecto que se parece a esto:

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Y eso fue sobre escribir la configuración de bd para que pueda eliminar esos vars de configuración para que laravel tome la configuración en / config o configure su configuración aquí.

Hice el segundo y me funciona :)

Jesus Gonzalez
fuente
5

¡Entendido! Inicie sesión como root y otorgue a homestead @ localhost los derechos de todo.

Desde tu terminal:

$ homestead ssh

$ mysql -u root -p

Enter password: secret

mysql> grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';

Query OK, 0 rows affected (0.00 sec)
exit

Ahora el usuario habitual de Homesteads tiene acceso a todas sus tablas y, como tal, debería poder ejecutar cosas como migraciones.

Mike Wright
fuente
5

Después de cambiar .env con la nueva configuración, debe detener el servidor y ejecutarlo nuevamente (php artisan serve). Porque laravel obtiene el entorno cuando se inicializa el servidor. ¡Si no reinicia, cambiará el .env preguntándose por qué los cambios no están teniendo lugar!

Luis Lopez
fuente
5

Todo lo que tiene que hacer es alterar su archivo .env .

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Delante de DB_DATABASE, escriba el nombre de la base de datos y delante de DB_USERNAME, use root .

Apoorv
fuente
4

Solo quería publicar esto porque este problema me ha frustrado durante unas 3 horas hoy. No he probado ninguno de los métodos enumerados en las otras respuestas, aunque todos parecen razonables. De hecho, estaba a punto de intentar analizar cada una de las soluciones propuestas anteriormente, pero de alguna manera obtuve este golpe de inspiración. Esto es lo que funcionó para mí para que volviera a funcionar: YMMV:

1) Encuentra tu archivo .env. 2) Cambie el nombre de su archivo .env a otra cosa. Laravel 5 debe usar este archivo como una anulación para la configuración en otro lugar del marco. Cambié el nombre del mío a .env.old 3) Es posible que deba reiniciar su servidor web, pero no tuve que hacerlo.

¡Buena suerte!

Eric Hepperle - CodeSlayer2010
fuente
3

Tienes que ejecutar el $ php artisan migratecomando desde Homestead, no desde tu Mac.

Frijol Martin
fuente
Su captura de pantalla muestra el nombre de la máquina como MBP-bheng-aveniors. Esa no es tu VM. Necesita SSH en Homestead ( $ homestead ssh) y luego ejecutar $ php artisan migratedesde esa sesión SSH.
Martin Bean
3

Verifique su archivo " .env " en la carpeta raíz. ¿es correcto?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Ferhat KOÇER
fuente
3

tengo encontrar solución

  1. Vaya al directorio raíz de su aplicación y abra el archivo .env (en ubuntu puede estar oculto, así que presione ctrl + h para mostrar los archivos ocultos) en su editor y cambie la configuración de la base de datos. luego guarde su archivo .env

  2. luego reinicie su servidor apache / servidor web. y actualiza tu página y has terminado

  3. Si aún se produce un problema, intente ejecutar el siguiente comando para borrar el archivo de caché de configuración anterior.

Esto funcionó para mí gl ...

DucaBgd
fuente
3

simplemente cambie estas cosas en el archivo .env de su carpeta raíz.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Funcionó para mi.

sradha
fuente
3

en mi caso (laravel 5+) tuve que ajustar mi contraseña entre comillas simples y borrar la caché de configuración:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=user_name
DB_PASSWORD='password'

y luego ejecuta:

php artisan config:clear
mh bitarafan
fuente
1

Inicie sesión en MYSQL: use la base de datos mysql.

Seleccione * del usuario;

Asegúrese de que su columna HOST sea correcta. Debe ser el host desde el que se conecta (su servidor de aplicaciones), ya sea la dirección IP o el nombre DNS. También '%' funcionará (es decir, comodín) pero no será seguro.

beiller
fuente
1

Verifique su archivo .env, si ha editado alguna de las variables, reinicie amablemente el servidor laravel y su problema se resolverá.

Ogbonna Vitalis
fuente
1

A. Después de actualizar el archivo .env con la configuración de la base de datos, borre la configuración larval "ejecutando php artisan config: clear"

B. Asegúrese de reiniciar su servidor apache / vuelva a ejecutar el comando "php artisan serve" para que su configuración surta efecto.

SoftwarerHelp
fuente
0

Tuve el mismo problema al usar SQLite. Mi problema fue que DB_DATABASE apuntaba a la ubicación incorrecta del archivo.

Cree el archivo sqlite con el comando táctil y genere la ruta del archivo usando php artisan tinker.

$ touch database/database.sqlite
$ php artisan tinker
Psy Shell v0.8.0 (PHP 5.6.27  cli) by Justin Hileman
>>> database_path(‘database.sqlite’)
=> "/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite"

Luego envíe esa ruta exacta a la variable DB_DATABASE.

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret

Sin la ruta correcta, obtendrá el error de acceso denegado

Connor Leech
fuente
0

Si tiene un error al devolver algo como PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'se debe a que está cambiando la configuración de batabase como DB_DATABASE=laravelu. Entonces por ahora tú tampoco:

  1. Cambiar el oDB_DATABASE=[yourdatabase]
  2. crea una base de datos llamada laraveluen tu phpmyadmin

esto debería ser capaz de resolverlo

Byron Wong
fuente
0

En mi caso, el error fue "causado" por mi configuración de Homestead / Vagrant sobre la cual olvidé :) intentar ejecutar la migración solo desde la línea de comandos.

En caso de usar el entorno Homestead Vagrant Box, debe ejecutar su migración desde su máquina Homestead (después de conectarse a ella usando ssh:), [email protected]:22entonces los derechos de acceso estarán bien y permitirán que se ejecute la migración.

Picard
fuente
0

Según su pregunta, parece que está ejecutando una granja. En ese caso, asegúrese de ejecutar los comandos en su VM. Muchos desarrolladores, incluido yo, a menudo cometemos errores y ejecutamos comandos artesanales fuera de VM que los comandos intentarán conectar a nuestra base de datos local accesible a través de localhost, que es diferente de la base de datos utilizada por homestead. Cd a su directorio de Homestead y ejecute

vagrant ssh

luego cd en el código si es donde guarda sus proyectos y cd en su proyecto y ejecutar php artisan migrate again Espero que esto ayude a otras personas.

Abdellah Ramadán
fuente