Odmowa dostępu dla użytkownika „homestead” @ „localhost” (używając hasła: TAK)

165

Korzystam z Mac OS Yosemite i Laravel 5.0.

W moim lokalnym środowisku biegam php artisan migratei otrzymuję:

Odmowa dostępu dla użytkownika „homestead” @ „localhost” (używając hasła: TAK)

Konfiguracja

Oto mój .env

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

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

aplikacja \ 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,
    ]

Jak uniknąć tego rodzaju błędów?

Próbowałem :


1

w app / database.php

wymienić localhostz127.0.0.1

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

Również w .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Spróbuj określić środowisko

php artisan migrate --env=local


3

Sprawdź, czy MySQL działa, uruchamiając

mysqladmin -u homestead -p status Enter password: secret

mam

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

Co oznacza, że ​​działa.


4

Sprawdź gniazdo MySQL UNIX ( ten krok działa dla mnie )

cyber8200
źródło
1
Najlepszą praktyką byłoby upewnienie się, że konto rzeczywiście istnieje w mysql ... „Znalazłem ten klucz na ulicy i nie działa w moim zamku drzwi wejściowych. Jak mogę zmienić zamek, aby klucz działał?”
Marc B
1
Rozumiem, że używasz homestead VM? Odkryłem, że będzie działać tylko wtedy, gdy jesteś w maszynie wirtualnej. możesz się do niego dostać przez ssh [email protected] -p 2222. Moja domyślna maszyna nie ma informacji o tym, że działa db.
Jay Edwards,

Odpowiedzi:

254

Przyczyną odmowy dostępu z powodu błędu laravel 5 użytkownika „homestead” @ „localhost” jest problem z buforowaniem pliku .env.php, ponieważ Laravel 5 używa konfiguracji opartej na środowisku w pliku .env.

1 . Przejdź do katalogu głównego aplikacji i otwórz plik .env (w Ubuntu może być ukryty, więc naciśnij ctrl+, haby wyświetlić ukryte pliki, a jeśli jesteś w terminalu, wpisz: ls -aaby wyświetlić ukryte pliki) w edytorze i zmień ustawienia konfiguracji bazy danych. następnie zapisz plik .env

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

2 . następnie zrestartuj serwer Apache / serwer WWW. i odśwież stronę i gotowe

3 . Jeśli problem nadal występuje, spróbuj uruchomić poniższe polecenie, aby wyczyścić stary plik pamięci podręcznej konfiguracji.

php artisan config:clear

Teraz skończyłeś z błędem

Abdou Tahiri
źródło
1
Pracowałem dla mnie dzięki, jedno pytanie, dlaczego musimy ustawić szczegóły bazy danych w pliku .env, tak jak robimy to w pliku database.php
Dipen
1
może potrzebujesz wielu środowisk, produkcji i lokalnych.
Abdou Tahiri
5
Ciągle próbowałem zrestartować Apache, kiedy przez cały czas korzystałem z "php rzemieślnika". Sugerowałbym, żebyś nie popełnił tego samego błędu co ja> <
Carlton
1
Nie działa, a teraz dostaję PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Czarny
1
Próbuję zmienić .envi config:clear cache:clearwszystkie polecenia, wznowiona apache, ale wciąż otrzymuję ten sam problem.
Luzan Baral
67

TLDR: Musisz zatrzymać serwer Ctrl+ ci zacząć ponownie używaćphp artisan serve


Detale:

Jeśli używasz Laravel i już uruchomiłeś lokalny serwer deweloperski do dnia php artisan serve

A gdy powyższy serwer już działa, zmieniasz rzeczy związane z serwerem bazy danych w pliku .env. Jak przejście z MySQL do SQLite czy coś w tym stylu. Musisz się upewnić, że zatrzymałeś powyższy proces, tj. Ctrcl CLub cokolwiek, co zatrzymuje proces. Następnie ponownie uruchom usługę Artisan Serve, tj. php artisan serveOdśwież przeglądarkę, a problem związany z bazą danych zostanie naprawiony. To właśnie zadziałało w przypadku Laravel 5.3

Mohsin
źródło
o mój boże, to zadziałało na mnie, dzięki. ale jak mogę przestać, gdy zmieniło się środowisko, czy są jakieś narzędzia? to jest dobre doświadczenie
saber tabatabaee yazdi
31

Dwa sposoby rozwiązania tego problemu

Pierwszy sposób (niezalecane)

Otwórz plik konfiguracyjny bazy danych (laravel_root / config / database.php) i wyszukaj poniższy blok kodu.

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

Zmień blok kodu jak poniżej

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

Drugi sposób (zalecane przez Laravel)

Sprawdź, czy w katalogu głównym Laravel jest plik o nazwie .env, jeśli nie istnieje, poszukaj pliku .env.example, skopiuj / zmień jego nazwę na .env, po czym plik wygląda na zepsuty!

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

Zmodyfikuj poniższy blok w następujący sposób

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

Teraz będzie działać dobrze.

absiddiqueLive
źródło
1
Jaki jest sens tego pliku? Ta informacja root/config/database.phpwydaje się zbędna.
Halter
Informacja nie jest zbędna, używa funkcji env do odczytu wartości z pliku .env w celu zabezpieczenia informacji o serwerze.
absiddiqueLive
Jak znaleźć lub utworzyć nazwę hosta, nazwę bazy danych, nazwę użytkownika i hasło w Homestead?
Connor Leech
21

jeśli używasz php artisan migrateNIE z vagrant box, ale z komputera hosta, musisz zdefiniować wewnątrz .envadresu IP pudełka192.168.10.10

i oczywiście ustaw pozwolenie na zawłaszczenie użytkownika ze swojego adresu IP, na przykład

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

w .envpliku

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead
wdog
źródło
Nie mogłem zmusić tego do pracy, ale grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';pracował dla mnie.
Ryan
21

Jeśli używasz domyślnego serwera WWW PHP (np. php artisan serve), Musisz zrestartować serwer po zmianie wartości w pliku .env.

Vrushal Raut
źródło
11

Gdy instalujesz Homestead, tworzy to domyślną bazę danych „homestead” na maszynie wirtualnej. Powinieneś połączyć się SSH z maszyną wirtualną homestead sshi stamtąd uruchomić migracje. Jeśli pracujesz lokalnie bez maszyny wirtualnej, musisz ręcznie utworzyć bazę danych. Domyślnie baza danych powinna nazywać się homestead, nazwa użytkownika to homestead, a hasło jest tajne.

sprawdź ten wątek na laracastach lub ten wpis na blogu, aby uzyskać więcej informacji


jeśli dostajesz

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

spróbuj zmienić „host” w pliku /app/config/database.php z „localhost” na „127.0.0.1”. więcej szczegółów i innych poprawek można znaleźć w tym wątku .

Sprawdź również, czy podałeś poprawną unix_socket. sprawdź ten wątek .

Sojan V Jose
źródło
@ rangerover.js spróbuj zmienić „host” w pliku /app/config/database.php z „localhost” na „127.0.0.1”
Sojan V Jose
@ rangerover.js sprawdź ten wątek stackoverflow.com/questions/20723803/… . zobacz, które rozwiązanie ma znaczenie.
Sojan V Jose
@ rangerover.js też sprawdzić, czy usługa jest uruchomiona MySQL :)
Sojan V Jose
@ rangerover.js może sprawdzić twój unix_socket? stackoverflow.com/a/25649930/939299
Sojan V Jose
1
W końcu zadziałało na czwartej próbie. Usuń wszystkie swoje komentarze i dołącz ten link stackoverflow.com/a/25649930/939299 jako część odpowiedzi, ponieważ jest to dla mnie pomocne.
cyber8200
11

Sprawdź gniazdo MySQL UNIX

Znajdź lokalizację unix_socket za pomocą 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)

Następnie przechodzę do config / database.php

Aktualizuję tę linię: 'unix_socket' => '/tmp/mysql.sock',

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

Otóż ​​to. To działa w mojej czwartej próbie. Mam nadzieję, że te kroki komuś pomogą. :RE

cyber8200
źródło
Wow, to mnie uratowało
:)
11

Miałem ten sam problem i ostatecznie okazało się, że muszę tylko zrestartować serwer i zacząć od nowa

Ctrl+ cwtedy

php artisan serve
code511788465541441
źródło
9

Na komputerze z systemem Windows Postępuj zgodnie z poniższymi instrukcjami.


  1. Uzyskaj dostęp do folderu głównego aplikacji.

  2. Edytuj plik .env

Uzyskaj dostęp do folderu głównego swojej aplikacji

Edytuj plik .env

Edytuj podświetlony i zmień odpowiednio nazwę użytkownika i hasło oraz nazwę bazy danych.

Fred Ondieki
źródło
9

w moim przypadku po ponownym uruchomieniu serwera problem zniknął.

zakończ / zamknij polecenie "php artisan serv" i

uruchom ponownie polecenie „php artisan serv” .

sh6210
źródło
8

Kiedyś w przyszłości. Spróbuj najpierw wyczyścić konfigurację

php artisan config:clear. 

Zamknij wszystkie okna terminala / cmd, a następnie uruchom ponownie terminal / CMD, co powinno pozbyć się komunikatu o błędzie. Sprawdź, czy to działa.

Krishneil
źródło
dzięki alot to działa dla mnie. nie wiem, dlaczego wystąpił ten błąd. Właśnie blisko wszystko i przeładowania i prowadzony php rzemieślnik config: jasne
szabla tabatabaee Yazdi
6

po konfiguracji db zrestartuj:

 php artisan serve

Jeśli serwis jest aktywny przed ustawieniem db config.

A1Gard
źródło
5

Używam laravel 5. * i myślę, że mam wywołanie pliku .envw katalogu głównym projektu, które wygląda mniej więcej tak:

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

I to był koniec pisania konfiguracji bd, więc możesz usunąć te zmienne konfiguracyjne, więc laravel weźmie konfigurację w / config lub skonfiguruj ją tutaj.

Zrobiłem drugie i u mnie działa :)

Jesus Gonzalez
źródło
5

Rozumiem! Zaloguj się jako root i przyznaj homestead @ localhost prawa do wszystkiego.

Z Twojego terminala:

$ 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

Teraz zwykły użytkownik homesteads ma dostęp do wszystkich twoich tabel i jako taki powinien być w stanie uruchamiać takie rzeczy jak migracje.

Mike Wright
źródło
5

Po zmianie .env na nową konfigurację, musisz zatrzymać serwer i uruchomić go ponownie (serwis php artisan). Ponieważ laravel pobiera środowisko po zainicjowaniu serwera. Jeśli nie zrestartujesz, zmienisz plik .env, zadając sobie pytanie, dlaczego zmiany nie mają miejsca !!

Luis Lopez
źródło
5

Wszystko, co musisz zrobić, to zmienić plik .env .

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

Przed DB_DATABASE wpisz nazwę bazy danych, a przed DB_USERNAME użyj root .

Apoorv
źródło
4

Chciałem to opublikować, ponieważ ten problem denerwował mnie dzisiaj przez około 3 godziny. Nie wypróbowałem żadnej z metod wymienionych w innych odpowiedziach, chociaż wszystkie wydają się rozsądne. Właściwie to właśnie miałem spróbować przejść przez każde z zaproponowanych powyżej rozwiązań, ale jakimś cudem dostałem tę inspirację. Oto, co zadziałało, aby przywrócić mi pracę - YMMV:

1) Znajdź swój plik .env. 2) Zmień nazwę pliku .env na inną. Laravel 5 musi używać tego pliku jako nadpisania ustawień w innym miejscu we frameworku. Zmieniłem nazwę mojej na .env.old 3) Być może trzeba będzie zrestartować serwer WWW, ale nie musiałem.

Powodzenia!

Eric Hepperle - CodeSlayer2010
źródło
3

Musisz uruchomić $ php artisan migratepolecenie z poziomu Homestead, a nie komputera Mac.

Martin Bean
źródło
Zrzut ekranu pokazuje nazwę komputera jako MBP-bheng-aveniors. To nie jest twoja maszyna wirtualna. Musisz $ homestead sshuruchomić SSH w Homestead ( ), a następnie uruchomić $ php artisan migratez tej sesji SSH.
Martin Bean
3

Sprawdź plik „ .env ” w folderze głównym. czy to jest poprawne?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Ferhat KOÇER
źródło
3

znalazłem rozwiązanie

  1. Przejdź do katalogu głównego aplikacji i otwórz plik .env (w Ubuntu może być ukryty, więc naciśnij ctrl + h, aby wyświetlić ukryte pliki) w edytorze i zmień ustawienia konfiguracji bazy danych. następnie zapisz plik .env

  2. następnie zrestartuj serwer Apache / serwer WWW. i odśwież stronę i gotowe

  3. Jeśli problem nadal występuje, spróbuj uruchomić poniższe polecenie, aby wyczyścić stary plik pamięci podręcznej konfiguracji.

To zadziałało dla mnie gl ...

DucaBgd
źródło
3

po prostu zmień te rzeczy w pliku .env folderu głównego.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

U mnie to zadziałało.

śradha
źródło
3

w moim przypadku (laravel 5+) musiałem zawinąć hasło w pojedyncze cudzysłowy i wyczyścić pamięć podręczną konfiguracji:

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

a następnie uruchom:

php artisan config:clear
mh. bitarafan
źródło
1

Zaloguj się do MYSQL - skorzystaj z bazy danych mysql.

Wybierz * od użytkownika;

Upewnij się, że kolumna HOST jest poprawna. Powinien to być host, z którego się łączysz (serwer aplikacji), czy to adres IP, czy nazwa DNS. Również „%” będzie działać (co oznacza symbol wieloznaczny), ale nie będzie bezpieczne.

Beiller
źródło
1

Sprawdź swój plik .env, jeśli edytowałeś którąkolwiek ze zmiennych, uprzejmie zrestartuj serwer laravel, a problem zostanie rozwiązany

Ogbonna Vitalis
źródło
1

A. Po zaktualizowaniu pliku .env z ustawieniami bazy danych, wyczyść ustawienia larw przez „uruchomienie php artisan config: clear”

B. Upewnij się, że zrestartowałeś serwer Apache / uruchom ponownie polecenie "php artisan serv", aby ustawienia odniosły skutek.

SoftwarerHelp
źródło
0

Miałem ten sam problem, używając SQLite. Mój problem polegał na tym, że DB_DATABASE wskazywało niewłaściwą lokalizację pliku.

Utwórz plik sqlite za pomocą polecenia touch i wyślij ścieżkę do pliku za pomocą 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"

Następnie wyprowadź dokładną ścieżkę do zmiennej 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

Bez poprawnej ścieżki pojawi się błąd odmowy dostępu

Connor Leech
źródło
0

Jeśli masz błąd zwracania czegoś takiego, jak PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'jest to spowodowane zmianą konfiguracji batabase jako DB_DATABASE=laravelu. Na razie więc:

  1. Zmień lubDB_DATABASE=[yourdatabase]
  2. utwórz bazę danych o nazwie laraveluphpmyadmin

to powinno być w stanie go rozwiązać

Byron Wong
źródło
0

W moim przypadku błąd był "spowodowany" moją konfiguracją Homestead / Vagrant, o której zapomniałem :) próbując uruchomić migrację tylko z linii poleceń.

W przypadku korzystania ze środowiska Homestead Vagrant Box należy przeprowadzić migrację z komputera Homestead (po połączeniu się z nim za pomocą ssh:), [email protected]:22wtedy prawa dostępu będą OK i umożliwią migrację.

Picard
źródło
0

Z twojego pytania wynika, że ​​prowadzisz domostwo. W takim przypadku upewnij się, że uruchamiasz polecenia na swojej maszynie wirtualnej. Wielu programistów, w tym ja, często popełnia błąd i wykonuje polecenia rzemieślnicze poza maszyną wirtualną, które będą próbowały połączyć się z naszą lokalną bazą danych dostępną za pośrednictwem hosta lokalnego, który różni się od bazy danych używanej przez homestead. Cd do katalogu Homestead i uruchom

vagrant ssh

następnie wykonaj cd do kodu, jeśli to tam trzymasz swoje projekty i CD do swojego projektu i uruchom. php artisan migrate again Mam nadzieję, że to pomoże innym ludziom.

Abdellah Ramadan
źródło