Accesso negato per l'utente 'homestead' @ 'localhost' (utilizzando la password: SÌ)


165

Sono su un Mac OS Yosemite usando Laravel 5.0.

Mentre nel mio ambiente locale , corro php artisan migratecontinuo a ottenere:

Accesso negato per l'utente 'homestead' @ 'localhost' (utilizzando la password: SÌ)

Configurazione

Ecco il mio .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,
    ]

Come evitare questo tipo di errore?

Ho provato :


1

in app / database.php

Sostituisci localhostcon127.0.0.1

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

Inoltre, in .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Prova a specificare l'ambiente

php artisan migrate --env=local


3

Controlla se MySQL è in esecuzione per esecuzione

mysqladmin -u homestead -p status Enter password: secret

ho ottenuto

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

Il che significa che sta funzionando.


4

Controlla MySQL UNIX Socket ( Questo passaggio funziona per me )


1
la migliore pratica sarebbe quella di garantire che l'account esista effettivamente in mysql ... "Ho trovato questa chiave per strada e non funziona nella serratura della mia porta d'ingresso. Come posso cambiare la serratura per far funzionare la chiave?"
Marc B,

1
Suppongo che stai usando la VM di fattoria? Ho scoperto che funzionerà solo quando sei nella VM. puoi accedervi tramite ssh vagrant@127.0.0.1 -p 2222. la mia macchina di default non ramifica che db è in esecuzione.
Jay Edwards,

Risposte:


254

Il motivo di accesso negato per errore laravel 5 dell'utente 'homestead' @ 'localhost' è il problema di memorizzazione nella cache del file .env.php perché Laravel 5 utilizza una configurazione basata sull'ambiente nel file .env.

1 . Vai alla directory principale dell'applicazione e apri il file .env (in Ubuntu potrebbe essere nascosto, quindi premi ctrl+ hper mostrare i file nascosti e se sei nel terminale quindi digita: ls -aper mostrare i file nascosti) nel tuo editor e modifica le impostazioni di configurazione del database. quindi salva il tuo file .env

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

2 . quindi riavvia il tuo server / web server apache. e aggiorna la tua pagina e il gioco è fatto

3 . Se il problema persiste, provare a eseguire il comando seguente per cancellare il vecchio file della cache di configurazione.

php artisan config:clear

Ora hai finito con l'errore


1
Ho lavorato per me grazie, una domanda sul perché dobbiamo impostare i nostri dettagli db sul file .env mentre lo facciamo sul file database.php
Dipen

1
forse ho bisogno di più ambienti, produzione e locali.
Abdou Tahiri,

5
Continuavo a provare a riavviare Apache mentre stavo usando "php artisan serve" per tutto il tempo, suggerirei di non commettere lo stesso errore di me> <
Carlton,

1
Non funziona e ora ottengo PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Nero

1
Ho provato a cambiare .enve config:clear cache:cleartutto il comando, riavviato apachema ottenendo ancora lo stesso problema.
Luzan Baral,

67

TLDR: è necessario arrestare il server Ctrl+ ce ricominciare a utilizzarephp artisan serve


Dettagli:

Se stai usando Laravel e hai già avviato un server di sviluppo locale php artisan serve

E dopo che il server sopra è già in esecuzione, cambi le cose relative al tuo server di database nel file .env. Come passare da MySQL a SQLite o qualcosa del genere. È necessario assicurarsi di interrompere il processo sopra, ovvero Ctrcl Cqualsiasi cosa che interrompa il processo. E quindi riavviare Artisan Serve di nuovo, ovvero ye php artisan serveaggiornare il browser e il problema relativo al database verrà risolto. Questo è ciò che ha funzionato per me per Laravel 5.3


oh mio dio, questo ha funzionato per me grazie. ma come posso smettere quando è cambiato env c'è qualche strumento? questa è una buona esperienza
sabre tabatabaee yazdi

31

Due modi per risolverlo

Primo modo (non raccomandato)

Apri il tuo file di configurazione del database (laravel_root / config / database.php) e cerca il blocco di codice qui sotto.

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

Modificare il blocco di codice come di seguito

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

Secondo modo (consigliato da Laravel)

Controlla la tua radice Laravel c'è una chiamata al file .env se non esiste, cerca .env.example, copia / rinominalo come .env dopo che il file sembra saltare!

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

Modificare il blocco sottostante come segue

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

Ora funzionerà bene.


1
Qual è il punto di questo file? Questa informazione root/config/database.phpsembra ridondante.
Halter,

La dose di informazioni non è ridondante, sta usando la funzione env per leggere il valore dal file .env per proteggere le informazioni del server.
absiddiqueVive il

Come trovare o creare il nome host, il nome del database, il nome utente e la password con Homestead?
Connor Leech,

21

se si utilizza php artisan migrateNOT dalla casella vagabonda ma dalla macchina host, è necessario definire all'interno .envdell'ip della casella192.168.10.10

e ovviamente impostare il permesso per l'utente homestead dal tuo IP qualcosa del genere

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

nel .envfile

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead

Non riuscivo a farlo funzionare, ma ha grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';funzionato per me.
Ryan,

21

Se si utilizza il server Web predefinito di PHP (ad es. php artisan serve) È necessario riavviare il server dopo aver modificato i valori del file .env.


11

Quando si installa Homestead, questo crea un database "homestead" predefinito nella VM. È necessario SSH nella VM homestead sshed eseguire le migrazioni da lì. Se lavori localmente senza VM, dovrai creare il tuo database manualmente. Per impostazione predefinita, il database deve essere chiamato homestead, il nome utente è homestead e la password è segreta.

controlla questa discussione sui laracasti o questo post sul blog per maggiori dettagli


se stai ottenendo

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

prova a cambiare "host" nel file /app/config/database.php da "localhost" a "127.0.0.1". puoi trovare maggiori dettagli e altre correzioni qui su questo thread .

Controlla anche se hai specificato il corretto unix_socket. controlla questa discussione .


@ rangerover.js prova a cambiare "host" nel file /app/config/database.php da "localhost" a "127.0.0.1"
Sojan V Jose

@ rangerover.js controllare questo thread stackoverflow.com/questions/20723803/... . vedere una delle soluzioni importanti.
Sojan V Jose,

@ rangerover.js controlla anche se il servizio mysql è in esecuzione :)
Sojan V Jose

@ rangerover.js può controllare il tuo unix_socket? stackoverflow.com/a/25649930/939299
Sojan V Jose

1
Finalmente ha funzionato il 4 ° tentativo. Elimina tutti i tuoi commenti e includi questo link stackoverflow.com/a/25649930/939299 come parte della tua risposta perché mi aiuta.
cyber8200,

11

Controlla il socket MySQL UNIX

Trova la posizione di unix_socket utilizzando 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)

Quindi vado a config / database.php

Aggiorno questa riga: 'unix_socket' => '/tmp/mysql.sock',

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

Questo è tutto. Funziona per me come il mio quarto tentativo. Spero che questi passaggi aiutino qualcuno. : D


Wow, questo mi ha salvato
:)

11

Ho avuto lo stesso problema e alla fine ho scoperto che dovevo solo riavviare il server e ricominciare

Ctrl+ callora

php artisan serve

9

In PC Windows Segui di seguito.


  1. Accedi alla cartella principale dell'applicazione.

  2. Modifica il file .env

Accedi alla cartella principale dell'applicazione

Modifica il file .env

Modifica l'evidenziato e modifica il Nome utente e la password e il Nome del database di conseguenza.


9

nel mio caso, dopo il riavvio mio server il problema era sparito.

uscire / chiudere il comando "php artisan serve" e

rieseguire il comando "php artisan serve" .


8

A volte in futuro. Prova a cancellare prima la tua configurazione

php artisan config:clear. 

Chiudi tutte le finestre terminal / cmd e quindi riavvia terminal / CMD e questo dovrebbe eliminare il messaggio di errore. Vedi se funziona.


grazie mille questo ha funzionato per me. non so perché questo errore si sia verificato. ho appena chiuso tutto e ricaricato ed
eseguo

6

dopo la configurazione del db riavviare:

 php artisan serve

Se il servizio è attivo prima di impostare db config.


5

sto usando laravel 5. * immagino di avere una chiamata al file .envnella radice del progetto che assomigli a questo:

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

E questo è finito quando scrivevo la configurazione bd in modo da poter cancellare quelle impostazioni di configurazione così laravel prende la configurazione sotto / config o imposta qui la tua configurazione.

Ho fatto il secondo e funziona per me :)


5

Fatto! Accedi come root e concedi a homestead @ localhost i diritti su tutto.

Dal tuo terminale:

$ 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

Ora l'utente abituale ha accesso a tutte le tue tabelle e, come tale, dovrebbe essere in grado di eseguire operazioni come le migrazioni.


5

Dopo aver modificato .env con la nuova configurazione, è necessario arrestare il server ed eseguirlo di nuovo (php artisan serve). Causa laravel ottiene l'ambiente quando viene inizializzato il server. Se non riavvii, cambierai il .env chiedendoti perché le modifiche non stanno avvenendo !!


5

Tutto quello che devi fare è modificare il tuo file .env .

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

Davanti a DB_DATABASE, scrivi il nome del database e davanti a DB_USERNAME, usa root .


4

Volevo solo postare questo perché questo problema mi ha frustrato per circa 3 ore oggi. Non ho provato nessuno dei metodi elencati nelle altre risposte, sebbene sembrino tutti ragionevoli. In effetti, stavo per provare a provare ognuna delle soluzioni sopra proposte, ma in qualche modo ho avuto questo colpo di ispirazione. Ecco cosa ha funzionato per me per farmi tornare a lavorare - YMMV:

1) Trova il tuo file .env. 2) Rinomina il tuo file .env in qualcos'altro. Laravel 5 deve utilizzare questo file come override per le impostazioni da qualche altra parte nel framework. Ho rinominato il mio in .env.old 3) Potrebbe essere necessario riavviare il server Web, ma non è necessario.

In bocca al lupo!


3

Devi eseguire il $ php artisan migratecomando da Homestead, non dal tuo Mac.


La schermata mostra il nome della macchina come MBP-bheng-aveniors. Questa non è la tua VM. È necessario SSH in Homestead ( $ homestead ssh) e quindi eseguire $ php artisan migrateda quella sessione SSH.
Martin Bean,

3

Controlla il tuo file " .env " nella cartella principale. è corretto?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

3

ho trovato una soluzione

  1. Vai alla directory principale dell'applicazione e apri il file .env (in Ubuntu potrebbe essere nascosto, quindi premi ctrl + h per mostrare i file nascosti) nel tuo editor e modifica le impostazioni di configurazione del database. quindi salva il tuo file .env

  2. quindi riavvia il tuo server / web server apache. e aggiorna la tua pagina e il gioco è fatto

  3. Se il problema persiste, provare a eseguire il comando seguente per cancellare il vecchio file della cache di configurazione.

Questo ha funzionato per me gl ...


3

basta cambiare queste cose nel file .env della cartella principale.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Ha funzionato per me.


3

nel mio caso (laravel 5+) ho dovuto racchiudere la mia password tra virgolette singole e cancellare la cache di configurazione:

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

e quindi eseguire:

php artisan config:clear

1

Accedi a MYSQL - usa il database mysql.

Seleziona * da Utente;

Assicurarsi che la colonna HOST sia corretta. Dovrebbe essere l'host da cui ci si sta connettendo (il proprio server delle applicazioni) sia l'indirizzo IP, sia il nome DNS. Anche '%' funzionerà (che significa jolly) ma non sarà sicuro.


1

Controlla il tuo file .env, se hai modificato una qualsiasi delle variabili, riavvia gentilmente il server laravel e il tuo problema sarà risolto


1

A. Dopo aver aggiornato il file .env con le impostazioni del database, cancella l'impostazione larvale "eseguendo php artisan config: clear"

B. Assicurati di riavviare il tuo server Apache / riesegui il comando "php artisan serve" affinché le tue impostazioni abbiano effetto.


0

Ho avuto lo stesso problema con SQLite. Il mio problema era che DB_DATABASE puntava alla posizione errata del file.

Crea il file sqlite con il comando touch e genera il percorso del file usando il tinker artigianale php.

$ 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"

Quindi emettere il percorso esatto per la variabile 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

Senza il percorso corretto si otterrà l'errore di accesso negato


0

Se si verifica un errore durante la restituzione di qualcosa di simile a PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'causa della modifica della configurazione del database come DB_DATABASE=laravelu. Quindi per ora neanche tu:

  1. Cambiare il DB_DATABASE=[yourdatabase] o
  2. crea un database chiamato laravelunel tuo phpmyadmin

questo dovrebbe essere in grado di risolverlo


0

Nel mio caso l'errore è stato "causato" dalla mia configurazione di Homestead / Vagrant di cui mi ero dimenticato :) cercando di eseguire la migrazione solo dalla riga di comando.

In caso di utilizzo dell'ambiente Homestead Vagrant Box, è necessario eseguire la migrazione dall'interno della propria macchina Homestead (dopo aver effettuato la connessione tramite ssh:), vagrant@192.168.10.10:22i diritti di accesso saranno OK e consentirà l'esecuzione della migrazione.


0

Dalla tua domanda, sembra che tu stia gestendo una fattoria. In tal caso, assicurati di eseguire i comandi nella tua VM. Molti sviluppatori, incluso me, spesso commettono errori ed eseguono comandi artigianali al di fuori della VM, che tenteranno di connettersi al nostro database locale accessibile tramite localhost, che è diverso dal database utilizzato da homestead. Cd nella directory di Homestead ed esegui

vagrant ssh

quindi esegui il cd in codice se è qui che mantieni i tuoi progetti e cd nel tuo progetto ed esegui php artisan migrate again spero che questo possa aiutare altre persone.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.