Ich verwende auf einem Mac OS Yosemite Laravel 5.0.
Während ich mich in meiner lokalen Umgebung befinde, starte ich php artisan migrate
und bekomme immer wieder:
Zugriff verweigert für Benutzer 'Homestead' @ 'localhost' (mit Passwort: JA)
Konfiguration
Hier ist mein . 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 solche Fehler?
Ich habe versucht:
in app/database.php
Ersetzen Sie localhost
durch 127.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
Versuchen Sie, die Umgebung anzugeben
php artisan migrate --env=local
Ü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.
Check MySQL UNIX Socket ( Dieser Schritt funktioniert bei mir )
Suchen Sie mit MySQL den Speicherort nix_socket
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',
an: 'unix_socket' => '/var/run/mysqld/mysqld.sock',
Das ist es. Ich hoffe, diese Schritte helfen jemandem. : D
Der Grund für die Verweigerung des Zugriffs für den Benutzer 'Homestead' @ 'localhost' laravel 5 ist Caching-Problem der .env.php-Datei, die Laravel 5 verursacht verwendet die umgebungsbasierte Konfiguration in Ihrer ENV-Datei.
1. Wechseln Sie in Ihr Anwendungsstammverzeichnis und öffnen Sie die ENV-Datei ctrl+h um versteckte Dateien anzuzeigen & wenn Sie sich im Terminal befinden, geben Sie Folgendes ein: ls -a
um versteckte Dateien anzuzeigen) in Ihrem Editor und ändern Sie die Konfigurationseinstellungen der Datenbank. 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
. 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
TLDR: Sie müssen den Server anhalten Ctrl + c und beginne erneut mit php artisan serve
Wenn Sie Laravel verwenden und den lokalen Entwicklungsserver bereits von php artisan serve
gestartet haben
Und nachdem der oben genannte Server bereits ausgeführt wurde, ändern Sie Ihre datenbankserverbezogenen Daten in der ENV-Datei. Als würde man von MySQL zu SQLite wechseln oder so. Sie müssen sicherstellen, dass Sie den obigen Prozess stoppen, d. H. Ctrcl C
oder alles, was den Prozess stoppt. Starten Sie anschließend Artisan Serve erneut, d. H. Y php artisan serve
, und aktualisieren Sie Ihren Browser. Das Problem mit der Datenbank wird behoben. Das hat für mich bei Laravel funktioniert 5.3
Zwei Wege, um 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 Ihr Laravel Root dort haben Sie einen Dateiaufruf .env falls nicht vorhanden, suchen Sie nach .env.example, kopieren/benennen Sie es in .env um, danach sieht die Datei wie geblasen 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.
wenn Sie php artisan migrate
NICHT von einer Vagrant-Box, sondern von einem Host-Computer aus verwenden, müssen Sie in .env
die IP-Adresse der Box 192.168.10.10
definieren.
und offensichtlich die Erlaubnis zu Homestead-Benutzer von Ihrer IP etwas wie
grant all privileges on *.* to 'Homestead'@% identified by 'secret';
in .env
Datei
DB_Host=192.168.10.10
DB_DATABASE=Homestead
DB_USERNAME=Homestead
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.
Ich hatte das gleiche Problem und am Ende stellte sich heraus, dass ich nur den Server neu starten und neu starten musste
Ctrl + c dann
php artisan serve
Bei der Installation von Homestead wird eine Standarddatenbank "Homestead" in der VM erstellt. Sie sollten SSH in den VM
Homestead ssh
einfügen und 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 lautet Homestead und das Kennwort ist geheim.
check this thread on laracasts oder this blog post für mehr details
wenn Sie bekommen
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
versuchen Sie, "Host" in der Datei /app/config/database.php von "localhost" auf "127.0.0.1" zu ändern. Weitere Details und Fehlerbehebungen finden Sie hier thread .
Überprüfen Sie auch, ob Sie den richtigen unix_socket
angegeben haben. überprüfe dies thread .
in meinem Fall war das Problem nach Neustart meines Servers verschwunden.
beende/schließe den "php artisan serve" Befehl und
Führen Sie den Befehl "php artisan serve" erneut aus.
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 beseitigt werden. Sehen Sie, ob es funktioniert.
nach der Konfiguration starten Sie db neu:
php artisan serve
Wenn der Server aktiv ist, bevor Sie db config gesetzt haben.
Sie müssen lediglich Ihre .env -Datei ändern.
DB_Host=localhost
DB_DATABASE=Homestead
DB_USERNAME=Homestead
DB_PASSWORD=secret
Schreiben Sie vor DB_DATABASE den Namen der Datenbank und verwenden Sie vor DB_USERNAME root .
Nach der Änderung von .env mit der neuen Konfiguration müssen Sie den Server stoppen und erneut ausführen (PHP Artisan Serve). Ursache laravel ruft die Umgebung ab, wenn der Server initialisiert wird. Wenn Sie nicht neu starten, ändern Sie die .env und fragen sich, warum die Änderungen nicht stattfinden !!
ich benutze laravel 5. * Ich glaube, ich habe einen Dateiaufruf .env
im 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 das Überschreiben der BD-Konfiguration, damit Sie diese Konfigurationsvariablen löschen können, also laravel nehmen Sie die Konfiguration unter/config oder richten Sie Ihre Konfiguration hier ein.
Ich habe das zweite gemacht und es funktioniert bei mir :)
Verstanden! Melden Sie sich als root an und gewähren Sie Homestead @ localhost die Rechte für alles.
Von Ihrem Terminal:
$ 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 haben reguläre Benutzer von Homesteads Zugriff auf alle Ihre Tabellen und sollten daher beispielsweise Migrationen ausführen können.
ich habe eine Lösung gefunden
Wechseln Sie in Ihr Anwendungsstammverzeichnis und öffnen Sie die ENV-Datei (in Ubuntu ist sie möglicherweise ausgeblendet, drücken Sie also Strg + h, um ausgeblendete Dateien anzuzeigen) in Ihrem Editor und ändern Sie die Konfigurationseinstellungen der Datenbank. Speichern Sie dann Ihre ENV-Datei
starten Sie dann Ihren Apache-Server/Webserver neu. und aktualisieren Sie Ihre Seite und Sie haben getan
Das hat bei mir geklappt gl ...
Ü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
Ich wollte dies nur posten, weil dieses Problem mich 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 jede der oben vorgeschlagenen Lösungen durchgehen, aber irgendwie bekam ich diesen Inspirationsschub. Hier ist, was für mich funktioniert hat, um mich wieder zum Arbeiten zu bringen - 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 das musste ich nicht.
Viel Glück!
Sie müssen den Befehl $ php artisan migrate
in Homestead ausführen, nicht auf Ihrem Mac.
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 '%' wird funktionieren (Platzhalter bedeuten), ist aber nicht sicher.
Überprüfen Sie Ihre .env-Datei, wenn Sie eine der Variablen bearbeitet haben, starten Sie den laravel -Server freundlich neu, und Ihr Problem wird behoben
ändern Sie diese Einstellungen 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.
A. Nachdem Sie die .env-Datei mit den Datenbankeinstellungen aktualisiert haben, löschen Sie die larval-Einstellung, indem Sie "php artisan config: clear" ausführen.
B. Stellen Sie sicher, dass Sie Ihren Apache-Server neu starten/den Befehl "php artisan serve" erneut ausführen, damit Ihre Einstellungen wirksam werden.
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 Touch-Befehl 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 den genauen 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
Wenn Sie einen Fehler bei der Rückgabe von _PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'
_ haben, ändern Sie Ihre batabase-Konfiguration als _DB_DATABASE=laravelu
_. Also fürs Erste entweder:
DB_DATABASE=
_ [yourdatabase]
oderlaravelu
in Ihrem phpmyadmindies sollte es lösen können
In meinem Fall wurde der Fehler durch meine Homestead/Vagrant-Konfiguration "verursacht", über die ich vergessen habe :) beim Versuch, die Migration nur über die Befehlszeile auszuführen.
Wenn Sie die Homestead Vagrant Box-Umgebung verwenden, sollten Sie die Migration von Ihrem Homestead-Computer aus ausführen (nachdem Sie eine Verbindung mit ssh: [email protected]:22
hergestellt haben). Dann sind die Zugriffsrechte in Ordnung und die Migration kann ausgeführt werden.