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.
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.
Antworten:
Wenn Ihr Server in aufgeführt app/etc/local.xml
ist localhost
und dieser Fehler im Fehlerprotokoll von Magento angezeigt wird, Magento jedoch weiterhin in Ordnung ist, wurde mysql neu gestartet und der Socket /tmp/mysql.sock
oder die Socket-Datei, in der er eingerichtet ist, ist my.cnf
vorü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.
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
Ich hatte das gleiche Problem, und ich habe unten verwendet, um auszuwählen, welche PHP zu verwenden sind. /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
Siehe offizielle Dokumente: SQLSTATE [HY000] [2002] Keine solche Datei oder kein solches Verzeichnis
Dies wird häufig durch eine andere PHP-Instanz verursacht, die von der PHP-Befehlszeile im Vergleich zum Webserver verwendet wird. Insbesondere mysql.sock
könnte falsch konfiguriert sein, wenn dies der Fall ist.
So stellen Sie fest, ob Sie eine Instanz von PHP verwenden:
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.ini
sich befindet.
phpinfo.php
auf Ihrem Webserver einen ein.phpinfo.php
mit dem Wert von php -i
.phpinfo.php
Zeigt die php.ini
von 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.
Ü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 .
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.