Ich versuche WordPress einzurichten. Ich habe Apache und MySQL ausgeführt und die Konten und die Datenbank sind alle eingerichtet. Ich habe versucht, eine einfache Verbindung herzustellen:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
Und das verstehe ich immer:
Fehler: 2002 - Keine solche Datei oder kein solches Verzeichnis
Über welche Datei oder welches Verzeichnis könnte es sprechen?
Ich bin auf einem OS X Snow Leopard und verwende den eingebauten Apache. Ich habe MySQL mit dem x86_64 dmg installiert.
UPDATE: Ich habe festgestellt, dass sich der Socket unter /tmp/mysql.sock befindet. In php.ini habe ich daher alle Vorkommen des falschen Pfads durch dieses ersetzt.
php
mysql
connection
mk12
quelle
quelle
/etc/init.d/mysql start
wenn Sie sich in einer Debian-Basisdistribution befinden. Wenn dies fehlschlägt, überprüfen Sie die/etc/my.cnf
Datei auf den richtigen Pfad für die MySQL-Socket-Datei.Antworten:
Wenn Sie Linux verwenden: Der Pfad zur Datei mysql.sock ist falsch. Dies liegt normalerweise daran, dass Sie (LAMPP) XAMPP verwenden und es nicht in /tmp/mysql.sock enthalten ist
Öffnen Sie die Datei php.ini und suchen Sie diese Zeile:
Und mach es
quelle
localhost
funktionieren, und TCP / IP funktioniert, sodass das Ändern in die TCP / IP-Adresse127.0.0.1
funktioniert.Ich hatte ein ähnliches Problem und konnte es lösen, indem ich meine MySQL mit
127.0.0.1
statt adressiertelocalhost
.Dies bedeutet wahrscheinlich, dass in meinem Host-Setup etwas nicht stimmt, aber diese schnelle Lösung bringt mich sofort zum Laufen.
quelle
code
127.0.0.1 localhost gefundencode
. Was mich neugierig macht, warum das Verbinden über localhost nicht funktioniert hat. Wenn mich jemand aufklären könnte, wäre ich glücklich.localhost
funktionieren, und TCP / IP funktioniert, sodass das Ändern in die TCP / IP-Adresse127.0.0.1
funktioniert.Dies ist für Mac OS X mit der nativen Installation von Apache HTTP und der benutzerdefinierten Installation von MySQL .
Die Antwort basiert auf der hervorragenden Antwort von @ alec-Canyon. Da ich jedoch einige spezifische Änderungen googeln musste, um sie in meiner Konfiguration zu konfigurieren, hauptsächlich Mac OS X-spezifisch, dachte ich, ich würde sie der Vollständigkeit halber hier hinzufügen.
Aktivieren Sie die PHP5-Unterstützung für Apache HTTP
Stellen Sie sicher, dass die PHP5-Unterstützung in aktiviert ist
/etc/apache2/httpd.conf
.Bearbeiten Sie die Datei mit
sudo vi /etc/apache2/httpd.conf
(geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden) und kommentieren Sie;
die Zeile aus (entfernen Sie sie vom Anfang), um die zu laden kommentieren Sie Modul php5_module .Starten Sie Apache HTTP mit
sudo apachectl start
(oderrestart
wenn es bereits gestartet ist und neu gestartet werden muss, um die Konfigurationsdatei erneut zu lesen)./var/log/apache2/error_log
Stellen Sie sicher, dass eine Zeile enthält, die angibt, dass das php5_module aktiviert ist - das sollten Sie sehenPHP/5.3.15
(oder ähnliches).Nachschlagen des Namens der Socket-Datei
Wenn MySQL läuft (mit
./bin/mysqld_safe
), sollten Debug-Zeilen auf der Konsole ausgedruckt werden, die Ihnen mitteilen, wo Sie die Protokolldateien finden. Notieren Sie den Hostnamen im Dateinamen -localhost
in meinem Fall - der für Ihre Konfiguration unterschiedlich sein kann.Die folgende Datei
Logging to
ist wichtig. Hier protokolliert MySQL seine Arbeit.Öffnen Sie die
localhost.err
Datei (auch hier kann Ihre Datei anders benannt sein), dhtail -1 /Users/jacek/apps/mysql/data/localhost.err
um den Namen der Socket-Datei herauszufinden - es sollte die letzte Zeile sein.Beachten Sie den
socket:
Teil - das ist die Socket-Datei, in der Sie verwenden solltenphp.ini
.Es gibt eine andere Möglichkeit (einige sagen eine einfachere Möglichkeit), den Speicherort des Dateinamens des Sockets zu bestimmen, indem Sie sich bei MySQL anmelden und ausführen:
Konfigurieren von PHP5 mit MySQL-Unterstützung - /etc/php.ini
Apropos php.ini ...
Im
/etc
Verzeichnis befindet sich die Datei /etc/php.ini.default . Kopieren Sie es in /etc/php.ini .Öffnen Sie
/etc/php.ini
und suchen Sie nach mysql.default_socket .Der Standardwert
mysql.default_socket
ist/var/mysql/mysql.sock
. Sie sollten es auf den Wert ändern, den Sie zuvor notiert haben - es war/tmp/mysql.sock
in meinem Fall.Ersetzen Sie die
/etc/php.ini
Datei, um den Namen der Socket-Datei wiederzugeben:Endgültige Überprüfung
Starten Sie Apache HTTP neu.
Überprüfen Sie die Protokolle, wenn kein Fehler in Bezug auf PHP5 vorliegt. Keine Fehler bedeuten, dass Sie fertig sind und PHP5 mit MySQL gut funktionieren sollte. Glückwunsch!
quelle
mysql_connect
ist das eigentliche Problem der ursprünglichen Frage und kein generisches Missverständnis der Installation von Software.localhost
. Niemand, der Hilfe beim Einrichten von xamp auf Macos sucht, wird durch Googeln hierher kommen. Daher habe ich den Begriff "Mist" verwendet. Dieser Thread hat überhaupt nichts mit Macos zu tun, sondern nur mit MySQL (nicht einmal PHP).Das Ersetzen von 'localhost' durch '127.0.0.1' in der Konfigurationsdatei (Datenbankverbindung) hat geholfen!
quelle
Ein Neustart des MySQL-Servers kann hilfreich sein. In meinem Fall hat der Neustart des Servers viel Zeit gespart.
PS-Verwendung
sudo service mysql restart
für Nicht-Root-Benutzer.quelle
Stellen Sie zunächst sicher, dass MySQL ausgeführt wird. Befehl: mysqld start
Wenn Sie immer noch keine Verbindung herstellen können: Wie sieht Ihre /etc/my.cnf aus? (oder /etc/msyql/my.cnf)
Die anderen 2 Beiträge sind insofern korrekt, als Sie Ihren Socket überprüfen müssen, da 2002 ein Socket-Fehler ist.
Ein großartiges Tutorial zum Einrichten von LAMP ist: http://library.linode.com/lamp-guides/centos-5.3/index-print
quelle
/usr/local/mysql/mysql-test/include/default_my.cnf
, sollte ich diese als my.cnf kopieren/etc
?Nicht, dass es Ihnen viel hilft, aber in den neueren Versionen (und noch weniger neueren Versionen ) von MySQL bedeutet Fehlercode 2002 "Keine Verbindung zum lokalen MySQL-Server über Socket [Name des Sockets] möglich" ein bisschen mehr.
quelle
Als ich die Antwort von Matthias D hier erweiterte, konnte ich diesen Fehler von 2002 sowohl auf MySQL als auch auf MariaDB mit genauen Pfaden mithilfe der folgenden Befehle beheben :
Holen Sie sich zuerst den tatsächlichen Pfad zum MySQL-Socket:
Dann holen Sie sich den PHP-Pfad :
Verknüpfen Sie sie mithilfe der Ausgabe dieser beiden Befehle :
Wenn dies zurückkehrt, müssen
No such file or directory
Sie nur den Pfad zu PHP mysql.sock erstellen. Wenn Sie beispielsweise Ihren Pfad/var/mysql/mysql.sock
hätten, würden Sie Folgendes ausführen:Versuchen Sie dann den Befehl sudo ln erneut.
quelle
Ich würde Ihre php.ini-Datei überprüfen und überprüfen, ob mysql.default_socket richtig eingestellt ist und ob Ihre mysqld korrekt mit einer Socket-Datei konfiguriert ist, auf die sie zugreifen kann. Typische Standardeinstellung ist "/tmp/mysql.sock".
quelle
/var/mysql/mysql.sock
, aber dieser Weg existiert nicht.Ich bin auch auf dieses Problem gestoßen, dann habe ich 'localhost' in '127.0.0.1' geändert, es funktioniert.
quelle
In meinem Fall habe ich ein Problem mit mysqli_connect.
wenn ich mich verbinden will
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () erhalte ich den Fehler "Keine solche Datei oder kein solches Verzeichnis".
das hat bei mir funktioniert
mysqli_connect('localhost:3306', 'myuser','mypassword')
quelle
Der Fehler 2002 bedeutet, dass MySQL über die Socket-Datei keine Verbindung zum lokalen Datenbankserver herstellen kann (z
/tmp/mysql.sock
. ) .Führen Sie Folgendes aus, um herauszufinden, wo sich Ihre Socket-Datei befindet:
Überprüfen Sie anschließend, ob Ihre Anwendung die richtige Unix-Socket-Datei verwendet, oder stellen Sie stattdessen eine Verbindung über den TCP / IP-Port her.
Überprüfen Sie dann noch einmal, ob Ihr PHP das richtige MySQL-Socket-Setup hat:
und stellen Sie sicher, dass die Datei vorhanden ist .
Testen Sie die Steckdose:
Wenn der Unix-Socket falsch ist oder nicht vorhanden ist, können Sie ihn mit einem Symlink verknüpfen, zum Beispiel:
oder korrigieren Sie Ihre Konfigurationsdatei (zB
php.ini
).Um die PDO- Verbindung direkt von PHP aus zu testen , können Sie Folgendes ausführen:
Überprüfen Sie auch die Konfiguration zwischen Apache und CLI (Befehlszeilenschnittstelle), da die Konfiguration unterschiedlich sein kann.
Siehe: Fehlerbehebung beim Herstellen einer Verbindung zu MySQL
Andere Dienstprogramme / Befehle, die helfen können, das Problem zu verfolgen:
mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
netstat -ln | grep mysql
php -r "phpinfo();" | grep mysql
php -i | grep mysql
xdebug.show_exception_trace=1
in Ihremxdebug.ini
sudo dtruss -fn mysqld
, unter Linux mit zu debuggenstrace
stat $(mysql_config --socket)
und ob Sie über genügend freien Speicherplatz verfügen (df -h
).net.core.somaxconn
.quelle
Stellen Sie sicher, dass Ihr lokaler Server (MAMP, XAMPP, WAMP usw.) ausgeführt wird.
quelle
Ich hatte ein ähnliches Problem.
Grundsätzlich besteht hier das Problem darin, dass wahrscheinlich zwei Instanzen von MySQL ausgeführt werden.
A) Eine
Lampe, die unter /etc/init.d ausgeführt wird. B) Lampe, die unter / opt / lamp installiert wird.
Lösung:
Schritt 1: - Finden Sie alle MySQL-laufenden Instanzen mit dem Befehl "find / | grep mysqld".
Schritt 2: - Fahren Sie die Dienste herunter, die unter ausgeführt werden /etc/init.d using service mysql stop
Schritt 3: - Starten Sie Ihre / opt / lamp / lamp neu
Du solltest gut gehen :)
quelle
Überprüfen Sie auf einem Mac einfach Ihre Einstellungen, bevor Sie die ganze harte Arbeit erledigen
System Preferences > MySQL
. Meistens habe ich erlebt, dass das Team seitdem auf dieses Problem gestoßen istThe MySQL Server Instance is stopped
.Klicken Sie auf die
Start MySQL Server
Schaltfläche und Magie wird passieren.quelle
Ich benutze PHP-FPM oder mehrere PHP-Version in meinem Server. In meinem Fall aktualisiere ich den mysqli-Wert, da es keinen mysql-Standard-Socket-Parameter gibt:
zu:
danke an @Alec Gorge
quelle
Ich hatte das gleiche Problem. Mein Socket wurde schließlich in /tmp/mysql.sock gefunden. Dann habe ich diesen Pfad zu php.ini hinzugefügt. Ich habe den Socket dort gefunden, indem ich die Seite "Serverstatus" in MySQL Workbench überprüft habe. Wenn sich Ihr Socket nicht in /tmp/mysql.sock befindet, kann MySQL Workbench Ihnen möglicherweise sagen, wo er sich befindet? (Zugegeben, Sie verwenden MySQL Workbench ...)
quelle
Ich habe MySQL mit dem Installationsprogramm installiert. Tatsächlich gab es neben dem Verzeichnis 'bin' kein Datenverzeichnis.
Daher habe ich das Verzeichnis 'data' manuell unter "C: \ Programme \ MySQL \ MySQL Server 8.0" erstellt. Und es hat funktioniert (Ändern des Root-Passworts gemäß den unter https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/de/resetting-permissions-windows.html vorgeschlagenen Schritten .
quelle
Digital Ocean MySql 2002-keine-solche-Datei-oder-Verzeichnis
Fügen Sie dieses Dateiende hinzu
/etc/mysql/my.cnf
Starten Sie MySql neu
service mysql restart
quelle
Ich hatte auch das gleiche Problem auf einem Linux-Server. Was mir geholfen hat, ist der Befehl ' sudo reboot ', mit dem der Linux-Server neu gestartet wird.
quelle
Aktivieren und Starten des Mariadb-Dienstes
sudo systemctl aktivieren mariadb.service
sudo systemctl start mariadb.service
quelle