Warnung: mysqli_connect(): (HY000/2002): Keine solche Datei oder Verzeichnis
Lesezeit: 4 Minuten
kramer65
Ich versuche, Vanilla-Foren auf meinem Mac zu installieren, und dafür habe ich gerade eine Datenbank und einen Benutzer über die MySQL-Befehlszeile erstellt:
mysql> CREATE DATABASE vanilla;
Query OK, 1 row affected (0.00 sec)
mysql> create user 'vanilla_user3'@'localhost' IDENTIFIED BY 'vanilla_password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON * . * TO 'vanilla_user3'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Also versuche ich mich mit folgendem Code zu verbinden:
$con=mysqli_connect("localhost","vanilla_user3","vanilla_password","vanilla");
if (mysqli_connect_errno($con)) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
aber leider bekomme ich eine Fehlermeldung
Warnung: mysqli_connect(): (HY000/2002): Keine solche Datei oder kein solches Verzeichnis in /Users/kramer65/Sites/vanilla/info.php in Zeile 3 Verbindung zu MySQL fehlgeschlagen: Keine solche Datei oder dieses Verzeichnis
Irgendeine Idee, wo ich falsch liege?
kramer65
Okay, ich habe gerade die Lösung gefunden. Das Problem stellte sich heraus, dass der Host nicht hätte sein sollen localhostaber 127.0.0.1. Ich dachte immer localhost und 127.0.0.1 war das gleiche, aber es stellte sich heraus, dass es anders war.
Also vielleicht als Tipp für zukünftige Benutzer, verwenden Sie im Zweifelsfall immer die IP.
Die Antwort von mohitmayank ist richtig. Wenn localhost nicht funktioniert, müssen Sie PHP mitteilen, wo Ihre MySQL-Socket-Datei zu finden ist.
– Nilpo
18. März 2017 um 1:21 Uhr
siehe meinen Kommentar zu #Adams Antwort vom 21. November 2016
– Jack Holt
25. April 2017 um 20:39 Uhr
Ähnliches Problem, aber einfacher: Wenn MySQL nicht startet, kann dies denselben Fehler verursachen. Der Server des Clients wurde seit Monaten nicht neu gestartet, nach dem Neustart lief mysql nicht und niemand dachte daran, dies zu überprüfen. Zu besorgt über die ganze Codebasis und “wer diesen Fehler verursacht hat”. lol (Nur weil Apache aktiv ist und Sie per ssh auf den Server zugreifen können, ist das keine Garantie dafür, dass MySQL auch aktiv ist)
– TheSatinKnight
16. Juni 2018 um 2:29 Uhr
@TheSatinKnight Ich beobachte denselben Fehler auch alle paar Monate, was mit dem zusammenzuhängen scheint, was Sie sagen, da der MySQL-Server genau in diesem Moment vorübergehend nicht verfügbar ist.
– Envajo
11. März 2019 um 6:55 Uhr
Ich hatte das gleiche Problem, aber das Problem war etwas verwandt php.ini Datei.
Ich musste diese beiden Zeilen bearbeiten /etc/php.ini (oder wo auch immer dein php.ini befindet sich):
Starten Sie den Apache-Server neu, um sicherzustellen, dass die Änderungen übernommen werden.
sudo apachectl restart
Dies ist die richtige Antwort für die Verwendung von Socket anstelle von TCP/IP.
– Yuda Prawira
5. September 2017 um 17:33 Uhr
mysql.sock befand sich für mich unter /var/run/mysqld/mysqld.sock’
– Agnel Vishal
8. November 2018 um 14:16 Uhr
Befolgen Sie dies, indem Sie die Anweisungen hier für Mac-Benutzer verwenden stackoverflow.com/questions/4219970/…
– Sharron Denice
12. April 2019 um 1:56 Uhr
Angenommen, Ihr MAMP-MySQL-Port ist wie standardmäßig auf 8889 eingestellt. Manchmal localhost allein reicht nicht aus, in diesem Fall müssen Sie auch den MySQL-Port einfügen, damit Sie dies tun würden localhost:8889 oder localhost:{whatever your MySQL port number is}. Ich bin noch neu bei MySQL, also kenne ich den Grund nicht, aber für alle da draußen, die kürzlich die Nachricht erhalten haben: Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in ... Das Hinzufügen der MySQL-Portnummer zu localhost war die Lösung für mich.
Was ich als Fehler betrachte, muss localhost tatsächlich den Port (auch wenn es der Standardwert von 3306 ist) im $host-Parameter hinzugefügt werden, aber kein anderer Hostname tut dies. Sie würden also “localhost:3306” für den $host-Parameter verwenden. Andere Hostnamen und IP-Adressen verwenden den $port-Parameter. Aber der Parameter $port wird ignoriert, wenn $host ‘localhost’ ist. Ich glaube, das Problem geht auf etwas im PHPdoc für __construct() zurück: “Wenn möglich, werden Pipes anstelle des TCP/IP-Protokolls verwendet”.
– Jack Holt
25. April 2017 um 20:31 Uhr
Wenn Sie Docker verwenden, verwenden Sie den mysql-Containernamen als Hostnamen von mysql. Wenn dies beispielsweise die Docker-Compose-Datei ist:
Danach ändern Sie in Ihrer DB-Verbindungsdatei von localhost zu 127.0.0.1. alles wird gut. jedoch, wenn Sie das versuchten config.inc.php Datei, vergewissern Sie sich, dass alles auf eingestellt ist 127.0.0.1nicht localhost.