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 .
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.
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
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:
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:
Melden Sie sich bei Ihrem Magento-Server an.
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.
Wenn Sie dies noch nicht getan haben, richten Sie phpinfo.phpauf Ihrem Webserver einen ein.
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.
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?
Ü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 .
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.
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:
Antworten:
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 .
quelle
Wenn Ihr Server in aufgeführt
app/etc/local.xml
istlocalhost
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, istmy.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.
quelle
Setzen Sie den Datenbank-Hostnamen auf 127.0.0.1 anstelle von localhost.
quelle
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
quelle
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
quelle
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:
NICHT
quelle
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:
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 vonphp -i
.phpinfo.php
Zeigt diephp.ini
von Ihrem Webserver verwendete Datei an. Wenn es sich von dem unterscheidet, was in PHP enthalten istphp.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.
quelle
Ü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 .
Verwenden Sie diesen Befehl, um festzustellen, wo Ihr MySQL-Server seinen Socket hat:
In meinem Fall, mit Percona Mysql in meinem Vagrant-System installiert, war die Socken-Socket-Datei zufällig hier zu finden:
( 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
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 .
quelle
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.
quelle
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:
PS: Das obige Beispiel ist für MAC, Sie können es auf ähnliche Weise auch für Windows oder Unix machen.
quelle