Zugriff für Benutzer 'homestead' @ 'localhost' verweigert (mit Passwort: YES)

165

Ich bin auf einem Mac OS Yosemite mit Laravel 5.0.

Während ich in meiner lokalen Umgebung laufe php artisan migrate, bekomme ich immer wieder:

Zugriff für Benutzer 'homestead' @ 'localhost' verweigert (mit Passwort: YES)

Aufbau

Hier ist meine .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,
    ]

Wie vermeide ich diese Art von Fehler?

Ich habe es versucht :


1

in app / database.php

Ersetzen localhostdurch127.0.0.1

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

Auch in .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Versuchen Sie, die Umgebung anzugeben

php artisan migrate --env=local


3

Überprüfen Sie, ob MySQL ausgeführt wird

mysqladmin -u homestead -p status Enter password: secret

ich habe

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

Was bedeutet, dass es läuft.


4

Überprüfen Sie MySQL UNIX Socket ( Dieser Schritt funktioniert für mich )

cyber8200
quelle
1
Die beste Vorgehensweise wäre, sicherzustellen, dass das Konto tatsächlich in MySQL vorhanden ist ... "Ich habe diesen Schlüssel auf der Straße gefunden und er funktioniert nicht in meinem Haustürschloss. Wie kann ich das Schloss ändern, damit der Schlüssel funktioniert?"
Marc B
1
Ich nehme an, Sie verwenden die Homestead-VM? Ich habe festgestellt, dass es nur funktioniert, wenn Sie in der VM sind. Sie können über ssh [email protected] -p 2222 darauf zugreifen. Mein Standardcomputer arbeitet nicht daran, dass die Datenbank ausgeführt wird.
Jay Edwards

Antworten:

254

Der Grund für die Verweigerung des Zugriffs für den Fehler 'homestead' @ 'localhost' laravel 5 des Benutzers ist das Caching-Problem der Datei .env.php, da Laravel 5 die umgebungsbasierte Konfiguration in Ihrer .env-Datei verwendet.

1 . Gehen Sie zu Ihrem Anwendungsstammverzeichnis und öffnen Sie die ENV-Datei (in Ubuntu ist sie möglicherweise ausgeblendet. Drücken Sie also ctrl+ h, um ausgeblendete Dateien anzuzeigen. Wenn Sie sich im Terminal befinden, geben Sie Folgendes ein , um ausgeblendete Dateien anzuzeigen ls -a) in Ihrem Editor und ändern Sie die Datenbankkonfigurationseinstellung. Speichern Sie dann Ihre .env-Datei

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

2 . Starten Sie dann Ihren Apache-Server / Webserver neu. und aktualisieren Sie Ihre Seite und Sie haben getan

3 . Wenn das Problem weiterhin besteht, versuchen Sie, den folgenden Befehl auszuführen, um die alte Konfigurations-Cache-Datei zu löschen.

php artisan config:clear

Jetzt sind Sie mit dem Fehler fertig

Abdou Tahiri
quelle
1
Ich habe für mich gearbeitet, danke, eine Frage, warum wir unsere Datenbankdetails für die .env-Datei so einstellen müssen, wie wir es für die Datei database.php tun
Dipen
1
Vielleicht brauche ich mehrere Umgebungen, Produktion und lokale.
Abdou Tahiri
5
Ich habe versucht, Apache neu zu starten, als ich die ganze Zeit "PHP Artisan Serve" verwendet habe. Ich würde vorschlagen, dass Sie nicht den gleichen Fehler machen wie ich.> <
Carlton
1
Funktioniert nicht und jetzt bekomme ich PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Schwarz
1
Ich habe versucht mich zu ändern .env und config:clear cache:clearalle Befehle, neu gestartet , apacheaber immer noch das gleiche Problem bekommen.
Luzan Baral
67

TLDR: Sie müssen den Server Ctrl+ stoppen cund erneut verwendenphp artisan serve


Einzelheiten:

Wenn Sie Laravel verwenden und den lokalen Entwicklungsserver bereits von gestartet haben php artisan serve

Und nachdem der oben genannte Server bereits ausgeführt wurde, ändern Sie Ihre Datenbankserver-bezogenen Inhalte in der ENV-Datei. Als würde man von MySQL zu SQLite wechseln oder so. Sie müssen sicherstellen, dass Sie über dem Prozess anhalten, dh Ctrcl Coder irgendetwas, das den Prozess stoppt. Starten Sie dann Artisan Serve erneut, dh php artisan serveaktualisieren Sie Ihren Browser, und Ihr Problem mit der Datenbank wird behoben. Dies hat bei Laravel 5.3 für mich funktioniert

Mohsin
quelle
Oh mein Gott, das hat bei mir funktioniert, danke. Aber wie kann ich aufhören, wenn sich die Umgebung ändert? Gibt es Werkzeuge? Dies ist eine gute Erfahrung
Säbel Tabatabaee Yazdi
31

Zwei Möglichkeiten, es zu lösen

Erster Weg (nicht empfohlen)

Öffnen Sie Ihre Datenbankkonfigurationsdatei (laravel_root / config / database.php) und suchen Sie nach dem folgenden Codeblock.

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

Ändern Sie den Codeblock wie folgt

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

Zweiter Weg (empfohlen von Laravel)

Überprüfen Sie, ob Ihr Laravel-Stammverzeichnis dort einen Dateiaufruf hat .env, falls nicht vorhanden. Suchen Sie nach .env.example, kopieren Sie es / benennen Sie es in .env um, danach sieht die Datei wie ein Schlag aus!

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

Ändern Sie den folgenden Block wie folgt

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

Jetzt wird es gut funktionieren.

absiddiqueLive
quelle
1
Was ist der Sinn dieser Datei? Diese Informationen root/config/database.phpscheinen überflüssig zu sein.
Halter
Die Informationen sind nicht redundant. Sie verwenden die env-Funktion, um den Wert aus der ENV-Datei zu lesen und die Serverinformationen zu sichern.
absiddiqueLive
Wie finden oder erstellen Sie Ihren Hostnamen, Datenbanknamen, Benutzernamen und Passwort mit Homestead?
Connor Leech
21

Wenn Sie php artisan migrateNICHT von Vagrant Box, sondern von Host-Computer verwenden, müssen Sie innerhalb .envder IP der Box definieren192.168.10.10

und offensichtlich setzen Sie die Erlaubnis, Homestead-Benutzer von Ihrer IP so etwas wie

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

in .envDatei

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead
wdog
quelle
Ich konnte das nicht zum Laufen bringen, grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';arbeitete aber für mich.
Ryan
21

Wenn Sie den Standard-Webserver von PHP verwenden (z. B. php artisan serve), müssen Sie Ihren Server neu starten, nachdem Sie die Werte Ihrer .env-Datei geändert haben.

Vrushal Raut
quelle
11

Wenn Sie Homestead installieren, wird eine Standarddatenbank "Homestead" in der VM erstellt. Sie sollten SSH in die VM einbinden homestead sshund Ihre Migrationen von dort aus ausführen. Wenn Sie lokal ohne VM arbeiten, müssen Sie Ihre Datenbank manuell erstellen. Standardmäßig sollte die Datenbank Homestead heißen, der Benutzername ist Homestead und das Passwort ist geheim.

Überprüfen Sie diesen Thread auf Laracasts oder diesen Blog-Beitrag für weitere Details


wenn du bekommst

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

Versuchen Sie, "host" in der Datei /app/config/database.php von "localhost" in "127.0.0.1" zu ändern. Weitere Details und andere Korrekturen finden Sie hier in diesem Thread .

Überprüfen Sie auch, ob Sie das richtige angegeben haben unix_socket. Überprüfen Sie diesen Thread .

Sojan V Jose
quelle
@ rangerover.js versuchen, "Host" in der Datei /app/config/database.php von "localhost" in "127.0.0.1" zu
ändern
@ rangerover.js Überprüfen Sie diesen Thread stackoverflow.com/questions/20723803/… . Sehen Sie, welche der Lösungen wichtig sind.
Sojan V Jose
@ rangerover.js überprüfen Sie auch, ob MySQL-Dienst läuft :)
Sojan V Jose
@ rangerover.js kann dein unix_socket überprüfen? stackoverflow.com/a/25649930/939299
Sojan V Jose
1
Es funktioniert endlich am 4. Versuch. Bitte löschen Sie alle Ihre Kommentare und fügen Sie diesen Link stackoverflow.com/a/25649930/939299 als Teil Ihrer Antwort hinzu, da er mir hilft.
Cyber8200
11

Überprüfen Sie MySQL UNIX Socket

Suchen Sie den Speicherort von unix_socket mit 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)

Dann gehe ich zu config / database.php

Ich aktualisiere diese Zeile: 'unix_socket' => '/tmp/mysql.sock',

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

Das ist es. Es funktioniert für mich als mein 4. Versuch. Ich hoffe, diese Schritte helfen jemandem. : D.

cyber8200
quelle
Wow, das hat mich gerettet :)
Petar Vasilev
11

Ich hatte das gleiche Problem und am Ende stellte sich heraus, dass ich nur den Server neu starten und neu starten musste

Ctrl+ cdann

php artisan serve
code511788465541441
quelle
9

In Windows PC Folgen Sie unten.


  1. Greifen Sie auf den Stammordner Ihrer Anwendung zu.

  2. Bearbeiten Sie die .env-Datei

Greifen Sie auf den Stammordner Ihrer Anwendung zu

Bearbeiten Sie die .env-Datei

Bearbeiten Sie das Markierte und ändern Sie den Benutzernamen und das Kennwort sowie den Datenbanknamen entsprechend.

Fred Ondieki
quelle
9

in meinem Fall nach dem Neustart das Problem meines Servers behoben.

Beenden / Schließen Sie den Befehl "PHP Artisan Serve" und

Führen Sie den Befehl "PHP Artisan Serve" erneut aus .

sh6210
quelle
8

Irgendwann in der Zukunft. Versuchen Sie zuerst, Ihre Konfiguration zu löschen

php artisan config:clear. 

Schließen Sie alle Terminal- / Cmd-Fenster und starten Sie Terminal / CMD neu. Dadurch sollte die Fehlermeldung behoben sein. Überprüfen Sie, ob es funktioniert.

Krishneil
quelle
Vielen Dank, das ist für mich gearbeitet. Ich weiß nicht, warum dieser Fehler passiert ist. Ich schließe einfach alle und
lade PHP Artisan Config neu und starte es
6

Nach der Konfiguration der Datenbank starten Sie Folgendes neu:

 php artisan serve

Wenn der Serve vor dem Setzen von db config aktiv ist.

A1Gard
quelle
5

Ich benutze Laravel 5. * Ich glaube, ich habe einen Dateiaufruf .envim Stammverzeichnis des Projekts, der ungefähr so aussieht:

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

Und das war über das Schreiben der bd-Konfiguration hinaus, damit Sie diese Konfigurationsvariablen löschen können, damit laravel die Konfiguration unter / config übernimmt oder Ihre Konfiguration hier einrichtet.

Ich habe das zweite gemacht und es funktioniert für mich :)

Jesus Gonzalez
quelle
5

Verstanden! Melden Sie sich als root an und gewähren Sie homestead @ localhost die Rechte für alles.

Von Ihrem Terminal aus:

$ 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

Jetzt hat der reguläre Benutzer von Homesteads Zugriff auf alle Ihre Tabellen und sollte daher in der Lage sein, beispielsweise Migrationen auszuführen.

Mike Wright
quelle
5

Nachdem Sie .env mit der neuen Konfiguration geändert haben, müssen Sie den Server stoppen und erneut ausführen (PHP Artisan Serve). Ursache Laravel erhält die Umgebung, wenn der Server initialisiert wird. Wenn Sie nicht neu starten, ändern Sie die .env und fragen sich, warum die Änderungen nicht stattfinden !!

Luis Lopez
quelle
5

Alles was Sie tun müssen, ist Ihre .env- Datei zu ändern .

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

Schreiben Sie vor DB_DATABASE den Namen der Datenbank und vor DB_USERNAME root .

Apoorv
quelle
4

Ich wollte dies nur posten, weil mich dieses Problem heute für ungefähr 3 Stunden frustriert hat. Ich habe keine der in den anderen Antworten aufgeführten Methoden ausprobiert, obwohl sie alle vernünftig erscheinen. Eigentlich wollte ich gerade versuchen, jede der oben vorgeschlagenen Lösungen durchzugehen, aber irgendwie bekam ich diesen Inspirationsschub. Folgendes hat für mich funktioniert, damit ich wieder arbeiten kann - YMMV:

1) Finden Sie Ihre .env-Datei. 2) Benennen Sie Ihre .env-Datei in etwas anderes um. Laravel 5 muss diese Datei als Überschreibung für Einstellungen an einer anderen Stelle im Framework verwenden. Ich habe meine in .env.old umbenannt. 3) Möglicherweise müssen Sie Ihren Webserver neu starten, aber ich musste nicht.

Viel Glück!

Eric Hepperle - CodeSlayer2010
quelle
3

Sie müssen den $ php artisan migrateBefehl in Homestead ausführen , nicht auf Ihrem Mac.

Martin Bean
quelle
Ihr Screenshot zeigt den Computernamen als MBP-bheng-aveniors. Das ist nicht deine VM. Sie müssen SSH in Homestead ( $ homestead ssh) ausführen und dann $ php artisan migrateinnerhalb dieser SSH-Sitzung ausführen .
Martin Bean
3

Überprüfen Sie Ihre " .env " -Datei im Stammordner. ist es richtig?

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

Ich habe eine Lösung gefunden

  1. Wechseln Sie in Ihr Anwendungsstammverzeichnis und öffnen Sie die ENV-Datei (in Ubuntu ist sie möglicherweise ausgeblendet, drücken Sie Strg + H, um ausgeblendete Dateien anzuzeigen) in Ihrem Editor und ändern Sie die Datenbankkonfigurationseinstellung. Speichern Sie dann Ihre .env-Datei

  2. Starten Sie dann Ihren Apache-Server / Webserver neu. und aktualisieren Sie Ihre Seite und Sie haben getan

  3. Wenn das Problem weiterhin besteht, versuchen Sie, den folgenden Befehl auszuführen, um die alte Konfigurations-Cache-Datei zu löschen.

Das hat bei mir funktioniert ...

DucaBgd
quelle
3

Ändern Sie diese Dinge einfach in der .env-Datei Ihres Stammordners.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Es hat bei mir funktioniert.

Sradha
quelle
3

In meinem Fall (Laravel 5+) musste ich mein Passwort in einfache Anführungszeichen setzen und den Konfigurationscache löschen:

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

und dann ausführen:

php artisan config:clear
mh. Bitarafan
quelle
1

Melden Sie sich bei MYSQL an - verwenden Sie die MySQL-Datenbank.

Wählen Sie * unter Benutzer;

Stellen Sie sicher, dass Ihre HOST-Spalte korrekt ist. Es sollte der Host sein, von dem aus Sie eine Verbindung herstellen (Ihr Anwendungsserver), sei es die IP-Adresse oder der DNS-Name. Auch '%' funktioniert (dh Platzhalter), ist aber nicht sicher.

beiller
quelle
1

Überprüfen Sie Ihre .env-Datei. Wenn Sie eine der Variablen bearbeitet haben, starten Sie den Laravel-Server neu, und Ihr Problem wird behoben

Ogbonna Vitalis
quelle
1

A. Nachdem Sie die .env-Datei mit den Datenbankeinstellungen aktualisiert haben, löschen Sie die Larveneinstellung, indem Sie "php artisan config: clear ausführen" ausführen.

B. Bitte stellen Sie sicher, dass Sie Ihren Apache-Server neu starten / führen Sie den Befehl "php artisan serve" erneut aus, damit Ihre Einstellungen wirksam werden.

SoftwareHilfe
quelle
0

Ich hatte das gleiche Problem mit SQLite. Mein Problem war, dass DB_DATABASE auf den falschen Dateispeicherort zeigte.

Erstellen Sie die SQLite-Datei mit dem Befehl touch und geben Sie den Dateipfad mit PHP Artisan Tinker aus.

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

Geben Sie dann genau diesen Pfad zur Variablen DB_DATABASE aus.

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

Ohne den richtigen Pfad wird der Fehler "Zugriff verweigert" angezeigt

Connor Leech
quelle
0

Wenn Sie einen Fehler beim Zurückgeben haben, PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'liegt dies daran, dass Sie Ihre Batabase-Konfiguration als ändern DB_DATABASE=laravelu. Also vorerst auch Sie:

  1. Ändern Sie das oderDB_DATABASE=[yourdatabase]
  2. Erstellen Sie eine Datenbank mit dem Namen laraveluphpmyadmin

Dies sollte es lösen können

Byron Wong
quelle
0

In meinem Fall wurde der Fehler durch meine Homestead / Vagrant-Konfiguration "verursacht", die ich vergessen habe :) Ich habe versucht, die Migration nur über die Befehlszeile auszuführen.

Wenn Sie die Homestead Vagrant Box-Umgebung verwenden, sollten Sie Ihre Migration von Ihrem Homestead-Computer aus ausführen (nachdem Sie eine Verbindung mit ssh hergestellt haben :). [email protected]:22Dann sind die Zugriffsrechte in Ordnung und ermöglichen die Ausführung der Migration.

Picard
quelle
0

Aus Ihrer Frage geht hervor, dass Sie ein Gehöft betreiben. Stellen Sie in diesem Fall sicher, dass Sie die Befehle in Ihrer VM ausführen. Viele Entwickler, einschließlich mir, machen häufig Fehler und führen handwerkliche Befehle außerhalb der VM aus, mit denen die Befehle versuchen, eine Verbindung zu unserer lokalen Datenbank herzustellen, auf die über localhost zugegriffen werden kann. Diese unterscheidet sich von der von homestead verwendeten Datenbank. CD in Ihr Homestead-Verzeichnis und ausführen

vagrant ssh

Dann CD in Code, wenn Sie dort Ihre Projekte behalten und CD in Ihr Projekt einbinden und ausführen. php artisan migrate again Ich hoffe, dies wird anderen Menschen helfen.

Abdellah Ramadan
quelle