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.