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 )


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 vagrant@127.0.0.1 -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


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


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.


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

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.


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 .


@ 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


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

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.


9

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

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

uruchom ponownie polecenie „php artisan serv” .


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.


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.


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 :)


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.


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 !!


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 .


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!


3

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


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

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 ...


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.


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

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.


1

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


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.


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


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ć


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:), vagrant@192.168.10.10:22wtedy prawa dostępu będą OK i umożliwią migrację.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.