SQLSTATE [HY000] [2002] Kein solcher Datei- oder Verzeichnisfehler

14

Bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten

SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis

Wenn Sie den obigen Fehler erhalten, kann mir jemand eine Lösung zur Verfügung stellen.

Kodierer
quelle
Ich habe es behoben, indem ich die Verbindungszeichenfolge geändert habe. Stellen Sie sicher, dass MySQL aktiviert ist und alle Tabellen in der Datenbank vorhanden sind.
Touqeer Shafi

Antworten:

12

Ich hatte das gleiche Problem bei der Installation von Magento 2.1.0 mit PHP 7.0.13.
Ich konnte dieses Problem beheben, indem ich den Hostnamen der Datenbank auf 127.0.0.1 anstelle von localhost setzte .

Jino
quelle
Wo soll das gemacht werden?
Joeybab3
inside ./app/etc/env.php
Jino
10

Wenn Ihr Server in aufgeführt app/etc/local.xmlist localhostund dieser Fehler im Fehlerprotokoll von Magento angezeigt wird, Magento jedoch weiterhin in Ordnung ist, wurde mysql neu gestartet und der Socket /tmp/mysql.sockoder die Socket-Datei, in der er eingerichtet ist, ist my.cnfvorübergehend verschwunden.

Da es fehlt, meldet der PDO-MySQL-Connector SQLSTATE[HY000] [2002] No such file or directory

Wenn Sie diesen Fehler ständig erhalten und abgesehen von der Seite "Ausnahmefehler" keinen Zugriff auf Magento haben, ist mysql vollständig abgestürzt und Sie benötigen Ihren Hosting-Provider, um herauszufinden, warum und mysql neu zu starten.

Fiasco Labs
quelle
6

Setzen Sie den Datenbank-Hostnamen auf 127.0.0.1 anstelle von localhost.

Gast
quelle
2

Dies kann auch passieren, wenn Ihr Dateisystem voll ist ... df -h 1st ... natürlich, meistens werden Sie davor gewarnt ...

mysqld läuft nicht normal und befindet sich in einem "sicheren" Modus

HTH SNS

shaheen shah
quelle
0

Stellen Sie sicher, dass Sie Ihre App / etc / local.xml ordnungsgemäß bearbeiten . Wenn Sie keine Präfixe für Ihre Tabellen haben, stellen Sie sicher, dass die richtige Zeile lautet:

<table_prefix><![CDATA[]]></table_prefix>

NICHT

<table_prefix>{{db_prefix}}</table_prefix>
AlexL
quelle
0

Dies wird häufig durch eine andere PHP-Instanz verursacht, die von der PHP-Befehlszeile im Vergleich zum Webserver verwendet wird. Insbesondere mysql.sockkönnte falsch konfiguriert sein, wenn dies der Fall ist.

So stellen Sie fest, ob Sie eine Instanz von PHP verwenden:

  1. Melden Sie sich bei Ihrem Magento-Server an.
  2. Geben Sie den folgenden Befehl ein:

    php -i | grep 'php.ini'

Dadurch werden die von der PHP-Befehlszeilenschnittstelle (CLI) verwendeten Einstellungen festgelegt. Notieren Sie, wo php.inisich befindet.

  1. Wenn Sie dies noch nicht getan haben, richten Sie phpinfo.phpauf Ihrem Webserver einen ein.
  2. Vergleichen Sie den Wert von Loaded Configuration File from phpinfo.phpmit dem Wert von php -i.

phpinfo.phpZeigt die php.inivon Ihrem Webserver verwendete Datei an. Wenn es sich von dem unterscheidet, was in PHP enthalten ist php.ini, müssen Sie alle PHP-Einstellungen sowohl für die PHP-CLI als auch für den Webserver konsistent machen.

Weitere Informationen finden Sie in der Dokumentation zu Ihrem Webserver.

gelanivishal
quelle
Das kann passieren - ich glaube, ich stehe gerade vor diesem Problem. Aber wieso? Gibt es spezielle Ideen, was in diesen INI-Dateien überprüft werden soll?
VladFr
4
Sie können diese Seite mit freundlicher
Shan
0

Über die Shell stehen mir mehrere PHP-Versionen zur Verfügung. Wenn ich PHP eingebe und die Tabulatortaste drücke , wird angezeigt, welche meiner automatischen Vervollständigung bekannt sind.

Für mich funktionierten PHP 5.4, 5.5 und 5.6 alle einwandfrei, aber PHP 7 fand den mysql.sock nicht und stürzte mit dem in dieser Frage behandelten "SQLSTATE [HY000] [2002] No such file or directory error" ab .

# Prints [ok]
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-5.6.20

# Prints [error] and shows a warning
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-7.0.8

Verwenden Sie diesen Befehl, um festzustellen, wo Ihr MySQL-Server seinen Socket hat:

cat /etc/mysql/my.cnf | grep socket

In meinem Fall, mit Percona Mysql in meinem Vagrant-System installiert, war die Socken-Socket-Datei zufällig hier zu finden:

/var/run/mysqld/mysqld.sock

( Beachten Sie, dass es mysqld heißt, nicht einfach mysql )

Ich habe mehrere Versionen von PHP zur Auswahl und diese Befehle zeigten mir, welche Probleme hatten und welche in Ordnung waren:

Die Antwort für mich war einfach, Code in das Vagrant Provisioner-Skript aufzunehmen, um eine Symlink zwischen /tmp/mysql.sock und /var/run/mysqld/mysqld.sock zu erstellen

if [ ! -L /tmp/mysql.sock ]; then
    echo "Creating symbolic link for php 7 to connect to mysql.sock"
    ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
fi

Mit dem neuen Symlink funktioniert das zuvor angegebene Testskript jetzt perfekt für alle PHP-Versionen und ich kann localhost in meinem Code verwenden, anstatt die IP-Adresse 127.0.0.1 eingeben zu müssen .

Martin Francis
quelle
0

Ich erhalte den gleichen Fehler "SQLSTATE [HY000] [2002] Keine solche Datei oder Verzeichnis". Und festgestellt, dass der MySQL-Dienst gestoppt wurde. Ich habe meinen MySQL-Dienst gestartet und er funktioniert einwandfrei.

Pandurang
quelle
0

Dies scheint ein falsches Problem mit der PHP-Version zu sein. Sie müssen wie folgt auswählen, welche PHP-Version verwendet werden soll, um den Befehl auszuführen:

/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade

PS: Das obige Beispiel ist für MAC, Sie können es auf ähnliche Weise auch für Windows oder Unix machen.

Prashant
quelle