Ich glaube, dass ich meine (sehr einfache) Site erfolgreich für fortrabbit bereitgestellt habe, aber sobald ich mich mit SSH verbinde, um einige Befehle (wie php artisan migrate
oder php artisan db:seed
) auszuführen, erhalte ich eine Fehlermeldung:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
Irgendwann muss die Migration funktioniert haben, weil meine Tabellen vorhanden sind - aber das erklärt nicht, warum es jetzt bei mir nicht funktioniert.
Antworten:
Die Fehlermeldung zeigt an, dass eine MySQL-Verbindung über Socket versucht wird (was nicht unterstützt wird).
Im Kontext von Laravel (Handwerker) möchten Sie wahrscheinlich eine andere / die richtige Umgebung verwenden. ZB:
php artisan migrate --env=production
(oder welche Umgebung auch immer). Siehe hier .quelle
Ich hatte genau das gleiche Problem. Keine der oben genannten Lösungen hat bei mir funktioniert. Ich habe das Problem gelöst, indem ich den "Host" in der Datei /app/config/database.php von "localhost" in "127.0.0.1" geändert habe.
Ich bin mir nicht sicher, warum "localhost" standardmäßig nicht funktioniert, aber ich fand diese Antwort in einer ähnlichen Frage, die in einem symfony2-Beitrag gelöst wurde. https://stackoverflow.com/a/9251924/1231563
Update: Einige Leute haben gefragt, warum dieses Update funktioniert, deshalb habe ich mich ein wenig mit dem Thema befasst. Es scheint, als würden sie unterschiedliche Verbindungstypen verwenden, wie in diesem Beitrag https://stackoverflow.com/a/9715164/1231563 erläutert
Das hier aufgetretene Problem ist, dass "localhost" einen UNIX-Socket verwendet und die Datenbank nicht im Standardverzeichnis finden kann. "127.0.0.1" verwendet jedoch TCP (Transmission Control Protocol), was im Wesentlichen bedeutet, dass es über das "lokale Internet" auf Ihrem Computer ausgeführt wird und in diesem Fall viel zuverlässiger als der UNIX-Socket ist.
quelle
localhost
nicht funktioniert und127.0.0.1
funktioniert?A Unix socket file is used if you do not specify a host name or if you specify the special host name localhost.
dev.mysql.com/doc/refman/5.7/en/can-not-connect-to-server.htmlIch habe das gleiche Problem und verwende Mac OS X 10.10 Yosemite. Ich habe den Apache Server und PHP aktiviert, die bereits mit dem Betriebssystem geliefert werden. Dann habe ich gerade die mCrypt-Bibliothek konfiguriert, um loszulegen. Danach, als ich mit Modellen und DB arbeitete, bekam ich den Fehler:
Der Grund, den ich gefunden habe, ist nur, dass PHP und MySQL nicht selbst verbunden werden können. Um dieses Problem zu beheben, gehe ich wie folgt vor:
Öffnen Sie ein Terminal und stellen Sie eine Verbindung zum MySQL her mit:
Sie werden nach dem entsprechenden Passwort gefragt. Sobald Sie die MySQL-Eingabeaufforderung erhalten haben, geben Sie den nächsten Befehl ein:
Sie werden so etwas bekommen:
Behalten Sie den Wert der letzten Zeile bei:
Suchen Sie in Ihrem
laravel
Projektordner nach der Datei database.php, in der Sie die DB-Verbindungsparameter konfigurieren. Im mysql Abschnitt die nächste Zeile am Ende hinzu:Sie müssen so etwas haben:
Speichern Sie jetzt einfach die Änderungen und laden Sie die Seite neu und es muss funktionieren!
quelle
/Applications/MAMP/tmp/mysql/mysql.sock
Ich bin
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
aus einem anderen Grund auf den Fehler gestoßen . Ich hatte gerade einen brandneuen LAMP-Stack unter Ubuntu 12.04 mit Apache 2.4.7, PHP v5.5.10 und MySQL 5.6.16 erstellt. Ich habe meine Websites wieder verschoben und sie gestartet. Aus den[PDOException]
oben genannten Gründen konnte ich meine Laravel 4.2.x-basierte Site jedoch nicht laden . Also habe ichphp -i | grep pdo
diese Zeile überprüft und bemerkt:Aber in meiner /etc/my.cnf befindet sich die Sockendatei tatsächlich in
/var/run/mysqld/mysqld.sock
.Also öffnete ich meine php.ini und stellte den Wert ein für
pdo_mysql.default_socket
:Dann habe ich Apache neu gestartet und überprüft
php -i | grep pdo
:Das hat es für mich behoben.
quelle
Die Antwort von @stuyam löste das Problem "Keine solche Datei oder kein solches Verzeichnis" für mich
Aber dann hatte ich einen Fehler "Verbindung abgelehnt". Wenn jemand das gleiche Problem hatte, bestand meine Lösung darin, die Datei app / config / local / database.php so zu aktualisieren, dass der Port 8889 lautet:
quelle
'port' => '33060'
aber diese Antwort brachte mich dorthin!Wenn Sie Laravel Homestead verwenden, stellen Sie sicher, dass Sie die Befehle auf dem Server aufrufen.
Dann cd einfach in das richtige Verzeichnis und feuere dort deinen Befehl ab.
quelle
source ~/.zshrc
2.homestead up --provision
3.homestead ssh
vagrant ssh
in meinem FallIn meinem Fall hatte ich überhaupt kein Problem, habe nur vergessen, den MySQL-Dienst zu starten ...
quelle
Mamp-Benutzeraktivierungsoption Netzwerkzugriff auf MYSQL zulassen
quelle
Fügen Sie den Pfad mysql.sock wie im folgenden Beispiel in die Datei database.php ein
Beispiel
quelle
Es hat funktioniert, nachdem ich von
DB_HOST=localhost
zuDB_HOST=127.0.0.1
.env-Datei gewechselt habequelle
localhost
das nicht funktioniert?Dies liegt daran, dass PDO den "localhost" -Host speziell behandelt:
(von http://php.net/manual/en/ref.pdo-mysql.connection.php )
Wenn Sie localhost in 127.0.0.1 ändern, wird die Verwendung von TCP "erzwungen".
Hinweis: mysqli_connect funktioniert einwandfrei mit localhost.
quelle
Aufbauend auf der Antwort von @dcarrith ...
Anstatt die Konfigurationsdateien zu bearbeiten, habe ich an dem von PHP gesuchten Speicherort einen Alias erstellt, der eine Verbindung zum echten mysql.sock herstellt. ( Quelle )
Führen Sie einfach diese beiden Befehle aus (kein Neustart erforderlich):
quelle
Schritt 1
Suchen Sie den Pfad zu Ihrem unix_socket, um dies zu tun, führen Sie es einfach aus
netstat -ln | grep mysql
Sie sollten so etwas bekommen
Schritt 2
Nehmen Sie das und fügen Sie es in Ihren unix_socket- Parameter ein
Ich hoffe es hilft !!
quelle
Ich arbeite mit MAMP Pro und hatte dieses ähnliche Problem beim Versuch zu migrieren (DB-Tabellen erstellen). Versuchte auch einige dieser erwähnten Vorschläge, tat es aber nicht für mich.
Also habe ich einfach (nach einer Stunde googeln) der /config/database.php zwei Dinge hinzugefügt.
Funktioniert jetzt gut!
quelle
Überprüfen Sie Ihren Port sorgfältig. In meinem Fall war es 8889 und ich verwende 8888. Ändern Sie "DB_HOST" von "localhost" in "127.0.0.1" und umgekehrt
quelle
Ich hatte diese Probleme, als ich meine Anwendung mit Docker-Containern ausführte.
Die Lösung wurde mit dem Namen des MySQL-
docker_compose.yml
Dienstcontainers versehen, den ich in DB_HOST verwendet habe. In meinem Fall war esdb
:Ich hoffe es hilft.
quelle
Ab Laravel 5 werden der Benutzername und das Kennwort der Datenbank in der .env-Datei gespeichert, die im Projektverzeichnis vorhanden ist, z
Wie Sie sehen können, überschreiben diese Umgebungsvariablen hier die 'Forge'-Zeichenfolgen, sodass eine Änderung keine Auswirkungen hat:
Weitere Informationen finden Sie hier https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables
quelle
Ich bin auf dieses Problem gestoßen, als ich PHPUnit in Elixir / Gulp und Homestead als meine Vagrant-Umgebung ausgeführt habe.
In meinem Fall habe ich die .env-Datei von dort bearbeitet
DB_HOST=localhost
,DB_HOST=192.168.10.10
wo192.168.10.10
sich die IP meines Vagrant / Homestead-Hosts befindet.quelle
Versuch, eine Verbindung zu localhost herzustellen:
Versuch, eine Verbindung zu 127.0.0.1 herzustellen:
OK, kommentieren / entfernen Sie einfach die folgende Einstellung aus my.cnf (unter OS X 10.5 :)
/opt/local/etc/mysqlxx/my.cnf
, um zu erhalten:Stoppen und starten Sie MySQL Server.
quelle
Ich hatte ähnliche Probleme beim Zugriff auf meine Drupal-Website. Ich habe das Problem behoben, indem ich die Befehlszeile geöffnet und meinen MySQL-Server oder -Dienst neu gestartet habe:
Das sollte funktionieren. Wenn dies nicht der Fall ist, starten Sie Ihren lokalen Webserver neu:
Das sollte genug sein. Hoffe, es funktioniert auch für andere Umgebungen. Beachten Sie, dass diese Befehle im Allgemeinen Superuser-Berechtigungen erfordern.
quelle
Wenn Sie Laravel Homestead verwenden, finden Sie hier Einstellungen
(einschließlich Vagrant-Virtual Machine)
.bash-Profil
database.php
Terminal
quelle
Wenn noch jemand nach der Antwort sucht, überprüfen Sie einfach Ihre .env-Datei. Aus irgendeinem Grund hat laravel eine .env.example-Datei erstellt, sodass all diese Antworten bei mir nicht funktionierten. Ich habe mein Problem behoben, indem ich .env.example in .env umbenannt habe
quelle
Das ist mir passiert, weil MySQL nicht lief. MySQL konnte nicht gestartet werden, da ein
/usr/local/etc/my.cnf.d/
Verzeichnis fehlte .Dies wurde von meiner
/usr/local/etc/my.cnf
Konfigurationsdatei als glob include (include /usr/local/etc/my.cnf.d/*.cnf
) benötigt.Das Ausführen
mkdir /usr/local/etc/my.cnf.d
und anschließende Starten von MySQL hat das Problem behoben.quelle
In meinem Fall habe ich PHP Artisan Migrate auf meinem Mac-Terminal ausgeführt, als ich in Vagabund ssh musste und es von dort aus ausführen musste. Hoffe das hilft jemandem die Kopfschmerzen.
quelle
Ich hatte das gleiche Problem bei der Verwendung des
db
Docker- und MySQL- Dienstnamens in der Datei docker_compose.yml:Ich habe folgendes in die
.env
Datei eingefügt :Sie sollten auch sicherstellen, dass Ihr Host über die PHP-App erkennbar ist.
Dies lag daran, dass PHP nicht herausgefunden hat, mit welchem Host eine Verbindung hergestellt werden soll.
quelle
Wenn Sie eine VirtualMachine verwenden, stellen Sie sicher, dass Sie sich auf diesem Computer befinden, zu Ihrem App-Ordner navigieren und von dort aus den Befehl php artisan migrate aufrufen.
quelle
Im Mai hatte ich einfach verwendet
anstatt
für meine Schmiede Larven Setup mit Homestead. Ich gehe davon aus, dass dies bedeutete, dass die Site bereitgestellt wurde, aber der MySQL-Server wurde nie gestartet. Als ich den letzteren Befehl verwendete, um meine Vagabundbox zu starten, verschwand der Fehler.
quelle
All diese Antworten scheinen schwer zu heben ...
Ich habe gerade eine
.env
Datei erstellt. bearbeitete meinebootstrap/app.php
Datei und kommentierte die folgende Zeile aus ...Dotenv::load(__DIR__.'/../');
Hoffe das hilft jemandem
quelle
Für alle, die versuchen, eine neue Datenbankverbindung zu erstellen, nicht auf Laravel, sondern hier auf der Suche nach Antworten, um PDO vom Terminal aus auszuführen. Dies würde Ihnen helfen. Und Sie können es so umgestalten, dass es am besten für Sie funktioniert.
ich hoffe es hilft!
quelle
In meinem Fall musste ich den Bootstrap / Cache-Ordner entfernen und es erneut versuchen.
Mein Szenario war nach einer Servermigration.
quelle