451 Stimmen

PDOException SQLSTATE[HY000] [2002] Die Datei oder das Verzeichnis konnte nicht gefunden werden

Ich glaube, dass ich meine (sehr einfache) Website erfolgreich auf fortrabbit bereitgestellt habe, aber sobald ich mich mit SSH verbinde, um einige Befehle auszuführen (wie php artisan migrate oder php artisan db:seed), erhalte ich eine Fehlermeldung:

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

Zu einem bestimmten Zeitpunkt muss die Migration funktioniert haben, denn meine Tabellen sind vorhanden - aber das erklärt nicht, warum es jetzt nicht für mich funktioniert.

869voto

stuyam Punkte 8890

Einer der einfachsten Gründe für diesen Fehler ist, dass ein MySQL-Server nicht läuft. Überprüfen Sie das zuerst. Wenn er läuft, fahren Sie mit anderen Empfehlungen fort:

Laravel 4: Ändern Sie "host" in der Datei app/config/database.php von "localhost" auf "127.0.0.1"

Laravel 5+: Ändern Sie "DB_HOST" in der Datei .env von "localhost" auf "127.0.0.1"

Ich hatte genau das gleiche Problem. Keine der oben genannten Lösungen hat für mich funktioniert. Ich habe das Problem gelöst, indem ich den "host" in der Datei /app/config/database.php von "localhost" auf "127.0.0.1" geändert habe.

Ich bin mir nicht sicher, warum "localhost" standardmäßig nicht funktioniert, aber ich habe diese Antwort in einem ähnlichen Beitrag in einem Symfony2-Post gefunden. https://stackoverflow.com/a/9251924

Update: Einige Leute haben gefragt, warum diese Lösung funktioniert, also habe ich etwas Recherche zu dem Thema gemacht. Anscheinend verwenden sie verschiedene Verbindungstypen, wie in diesem Beitrag erklärt https://stackoverflow.com/a/9715164

Das aufgetretene Problem hier ist, dass "localhost" einen UNIX-Socket verwendet und die Datenbank im Standardverzeichnis nicht finden kann. "127.0.0.1" hingegen verwendet das TCP (Transmission Control Protocol), was im Wesentlichen bedeutet, dass es durch das "lokale Internet" auf Ihrem Computer läuft und in diesem Fall viel zuverlässiger ist als der UNIX-Socket.

167voto

ukautz Punkte 2163

Die Fehlermeldung deutet darauf hin, dass eine MySQL-Verbindung über Socket versucht wird (was nicht unterstützt wird).

Im Kontext von Laravel (artisan) möchten Sie wahrscheinlich eine andere / die richtige Umgebung verwenden. Z.B.: php artisan migrate --env=production (oder eine andere Umgebung). Siehe hier.

116voto

alexventuraio Punkte 5240

Ich habe das gleiche Problem und ich benutze Mac OS X 10.10 Yosemite. Ich habe den Apache-Server und PHP aktiviert, welches schon mit dem Betriebssystem geliefert wird. Danach habe ich einfach die mCrypt-Bibliothek konfiguriert, um loszulegen. Danach, als ich mit Modellen und DB arbeitete, erhielt ich den Fehler:

[PDOException]
SQLSTATE[HY000] [2002] Datei oder Verzeichnis nicht gefunden

Der Grund, den ich gefunden habe, ist einfach, weil PHP und MySQL sich nicht verbinden können. Um dieses Problem zu beheben, folge den nächsten Schritten:

  1. Öffne ein Terminal und verbinde dich mit mysql mit:

    mysql -u root -p
  2. Es wird nach dem zugehörigen Passwort gefragt. Sobald du das mysql-Prompt erhältst, gib den nächsten Befehl ein:

    mysql> show variables like '%sock%'
  3. Du wirst etwas Ähnliches wie das bekommen:

    +-----------------------------------------+-----------------+
    | Variable_name                           | Value           |
    +-----------------------------------------+-----------------+
    | performance_schema_max_socket_classes   | 10              |
    | performance_schema_max_socket_instances | 322             |
    | socket                                  | /tmp/mysql.sock |
    +-----------------------------------------+-----------------+
  4. Behalte den Wert der letzten Zeile bei:

    /tmp/mysql.sock
  5. In deinem laravel Projektordner, suche nach der database.php-Datei, dort konfigurierst du die DB-Verbindungseinstellungen. Füge im mysql-Abschnitt die folgende Zeile am Ende hinzu:

    'unix_socket' => '/tmp/mysql.sock'
  6. Du solltest etwas Ähnliches haben wie:

    'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'SchoolBoard',
            'username'  => 'root',
            'password'  => 'venturaa',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket' => '/tmp/mysql.sock',
        ),

Jetzt speichere einfach die Änderungen, lade die Seite neu und es sollte funktionieren!

53voto

dcarrith Punkte 7120

Ich bin auf den [PDOException] SQLSTATE[HY000] [2002] Keine Datei oder Verzeichnis gefunden Fehler aus einem anderen Grund gestoßen. Ich hatte gerade einen brandneuen LAMP-Stack auf Ubuntu 12.04 mit Apache 2.4.7, PHP v5.5.10 und MySQL 5.6.16 erstellt. Ich habe meine Websites zurückgeschoben und gestartet. Allerdings konnte ich meine auf Laravel 4.2.x basierende Website nicht laden, wegen des oben genannten [PDOException]. Also habe ich php -i | grep pdo überprüft und diese Zeile bemerkt:

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

Aber in meiner /etc/my.cnf Datei liegt die Socket-Datei tatsächlich in /var/run/mysqld/mysqld.sock.

Also habe ich meine php.ini geöffnet und den Wert für pdo_mysql.default_socket gesetzt:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

Dann habe ich Apache neu gestartet und php -i | grep pdo überprüft:

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

Das hat das Problem für mich gelöst.

48voto

Marlow Punkte 481

Die Antwort von @stuyam hat das Problem "Keine solche Datei oder Verzeichnis" für mich gelöst

Kurze Antwort: Ändern Sie "host" in der Datei /app/config/database.php von "localhost" auf "127.0.0.1"

Aber dann hatte ich einen Fehler "Verbindung verweigert". Falls jemand das gleiche Problem hatte, war meine Lösung, die app/config/local/database.php Datei zu aktualisieren, so dass der Port 8889 ist:

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'port'      => '8889',
        'database'  => 'DatenbankName',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X