Ich versuche, WordPress einzurichten. Ich habe Apache und MySQL und die Konten und die Datenbank sind eingerichtet. Ich habe versucht, eine einfache Verbindung herzustellen:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
Und ich bekomme das immer:
Fehler: 2002 - Keine solche Datei oder 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 der x86_64 dmg installiert.
UPDATE: Ich habe festgestellt, dass sich der Socket unter /tmp/mysql.sock befindet. In php.ini habe ich alle Vorkommen des falschen Pfads damit ersetzt.
Wenn Sie Linux verwenden: Der Pfad zur Datei mysql.sock ist falsch. Dies liegt normalerweise daran, dass Sie (LAMPP) XAMPP verwenden und nicht in /tmp/mysql.sock enthalten sind
Öffnen Sie die Datei php.ini und suchen Sie nach dieser Zeile:
mysql.default_socket
Und mach es
mysql.default_socket = /path/to/mysql.sock
Ich hatte ein ähnliches Problem und konnte dieses Problem lösen, indem ich mein mysql mit 127.0.0.1
anstelle von localhost
adressierte.
Dies bedeutet wahrscheinlich, dass ich bei der Konfiguration meiner Hosts etwas falsch gemacht habe, aber diese schnelle Lösung bringt mich sofort in Schwung.
Dies gilt für Mac OS X mit der native Installation von Apache HTTP und custom Installation von MySQL.
Die Antwort basiert auf der hervorragenden Antwort von @ alec-gorge. Da ich jedoch einige Änderungen vornehmen 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.
Stellen Sie sicher, dass die PHP5-Unterstützung in /etc/Apache2/httpd.conf
aktiviert ist.
Bearbeiten Sie die Datei mit Sudo vi /etc/Apache2/httpd.conf
(geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden) und entfernen Sie die Kommentarzeile (entfernen Sie ;
vom Anfang), um das Modul php5_module zu laden.
LoadModule php5_module libexec/Apache2/libphp5.so
Starten Sie Apache HTTP mit Sudo apachectl start
(oder restart
, falls es bereits gestartet wurde und neu gestartet werden muss, um die Konfigurationsdatei erneut zu lesen).
Stellen Sie sicher, dass /var/log/Apache2/error_log
eine Zeile enthält, die Sie darüber informiert, dass das php5_module aktiviert ist. Sie sollten PHP/5.3.15
(oder ähnliches) sehen.
[notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations
Wenn MySQL läuft (mit ./bin/mysqld_safe
), sollten Debug-Zeilen an die Konsole ausgegeben werden, die Ihnen mitteilen, wo Sie die Protokolldateien finden können. Beachten Sie den Hostnamen im Dateinamen - in meinem Fall localhost
-, der für Ihre Konfiguration möglicherweise anders ist.
Die nach Logging to
kommende Datei ist wichtig. Hier protokolliert MySQL seine Arbeit.
130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'.
130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data
Öffnen Sie die localhost.err
-Datei (auch hier wird Ihr Name möglicherweise anders benannt), d. H. tail -1 /Users/jacek/apps/mysql/data/localhost.err
, um den Namen der Socket-Datei herauszufinden - es sollte die letzte Zeile sein.
$ tail -1 /Users/jacek/apps/mysql/data/localhost.err
Version: '5.5.27' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL)
Beachten Sie den socket:
-Teil - das ist die Socket-Datei, die Sie in php.ini
verwenden sollten.
Es gibt einen anderen Weg (einige sagen einen einfacheren Weg), um den Speicherort des Dateinamens des Sockets zu ermitteln, indem Sie sich bei MySQL anmelden und ausführen:
show variables like '%socket%';
Apropos php.ini ...
Im /etc
-Verzeichnis befindet sich die Datei /etc/php.ini.default. Kopieren Sie es nach /etc/php.ini.
Sudo cp /etc/php.ini.default /etc/php.ini
Öffnen Sie /etc/php.ini
und suchen Sie nach mysql.default_socket.
Sudo vi /etc/php.ini
Der Standard von mysql.default_socket
ist /var/mysql/mysql.sock
. Sie sollten es auf den Wert ändern, den Sie zuvor notiert haben - in meinem Fall war es /tmp/mysql.sock
.
Ersetzen Sie die /etc/php.ini
-Datei, um den Namen der Socket-Datei anzuzeigen:
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
Starten Sie Apache HTTP neu.
Sudo apachectl restart
Überprüfen Sie die Protokolle, wenn kein Fehler in Bezug auf PHP5 vorliegt. Keine Fehler bedeutet, dass Sie fertig sind und PHP5 mit MySQL gut funktionieren sollte. Glückwunsch!
Das Ersetzen von 'localhost' auf '127.0.0.1' in der Konfigurationsdatei (Datenbankverbindung) hat geholfen!
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?
Die anderen 2 Beiträge sind korrekt, da Sie Ihren Socket überprüfen müssen, weil 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
Erweitert auf Matthias Ds Antwort hier Ich konnte diesen 2002-Fehler unter MySQL und MariaDB mit den exakten Pfaden mit den folgenden Befehlen beheben:
Holen Sie sich zuerst den actual-Pfad zum MySQL-Socket:
netstat -ln | grep -o -m 1 '/.*mysql.sock'
Dann holen Sie sich den PHP Pfad:
php -r 'echo ini_get("mysql.default_socket") . "\n";'
Verknüpfen Sie sie mit der -Ausgabe dieser beiden Befehle:
Sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock
Wenn dies No such file or directory
zurückgibt, müssen Sie nur den Pfad zur PHP mysql.sock erstellen. Wenn Sie beispielsweise /var/mysql/mysql.sock
angeben, würden Sie Folgendes ausführen:
Sudo mkdir -p /var/mysql
Versuchen Sie dann erneut den Befehl Sudo ln.
in meinem Fall habe ich ein Problem mit mysqli_connect.
wenn ich eine Verbindung herstellen möchtemysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () gibt mir diesen Fehler "Keine solche Datei oder Verzeichnis" zurück
das hat bei mir geklappt mysqli_connect('localhost:3306', 'myuser','mypassword')
Ich bin auch auf dieses Problem gestoßen, dann habe ich 'localhost' in '127.0.0.1' geändert, es funktioniert.
Ich überprüfe Ihre php.ini-Datei und vergewissere mich, dass mysql.default_socket richtig eingestellt ist, und vergewissern Sie sich auch, dass Ihre mysqld mit einer Socket-Datei konfiguriert ist, auf die sie zugreifen kann. Die Standardeinstellung ist "/tmp/mysql.sock".
Nicht, dass es Ihnen sehr hilft, aber in den letzten Versionen (und sogar weniger jüngeren ) von MySQL bedeutet der Fehlercode 2002: "Verbindung zum lokalen MySQL-Server kann nicht über Socket [Name-of-Socket" hergestellt werden ] “, Das könnte Ihnen etwas mehr sagen.
Ein Neustart des MySQL-Servers kann hilfreich sein. In meinem Fall hat der Neustart des Servers viel Zeit gespart.
service mysql restart
P.S.- use Sudo service mysql restart
für Benutzer ohne Rootberechtigung.
Der Fehler 2002 bedeutet, dass MySQL keine Verbindung zum lokalen Datenbankserver über die Socket-Datei herstellen kann (z. B. /tmp/mysql.sock
).
Um herauszufinden, wo sich Ihre Socket-Datei befindet, führen Sie Folgendes aus:
mysql_config --socket
ü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:
php -i | grep mysql.default_socket
und stellen Sie sicher, dass die Datei vorhanden ist .
Testen Sie die Steckdose:
mysql --socket=/var/mysql/mysql.sock
Wenn der Unix-Socket falsch ist oder nicht existiert, können Sie ihn symbolisch verknüpfen, zum Beispiel:
ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
oder korrigieren Sie Ihre Konfigurationsdatei (z. B. php.ini
).
Um die PDO Verbindung direkt von PHP aus zu testen, können Sie Folgendes ausführen:
php -r "new PDO('mysql:Host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"
Überprüfen Sie auch die Konfiguration zwischen Apache und CLI (Befehlszeilenschnittstelle), da die Konfiguration abweichen kann.
Möglicherweise wird der Server ausgeführt, Sie versuchen jedoch, eine Verbindung über einen TCP/IP-Port, eine Named Pipe oder eine Unix-Socket-Datei herzustellen, die sich von der Datei unterscheidet, auf der der Server empfangsbereit ist. Um dies zu korrigieren, müssen Sie ein Client-Programm aufrufen (z. B. die Option
--port
Angeben), um die richtige Portnummer oder die richtige Named Pipe- oder Unix-Socket-Datei anzugeben (z. B. die Option--socket
).
Siehe: Fehlerbehebung bei Verbindungsproblemen mit MySQL
Andere Hilfsprogramme/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 Ihrem xdebug.ini
Sudo dtruss -fn mysqld
, Unter Linux debuggen Sie mit strace
stat $(mysql_config --socket)
und ob genügend Speicherplatz vorhanden ist (df -h
).net.core.somaxconn
.Stellen Sie sicher, dass Ihr lokaler Server (MAMP, XAMPP, WAMP usw.) läuft.
Ich verwende PHP-FPM oder mehrere PHP-Versionen auf meinem Server. In meinem Fall aktualisiere ich den mysqli-Wert, da es keinen Standard-Socket-Parameter für mysql gibt:
mysqli.default_socket
zu:
mysql.default_socket = /path/to/mysql.sock
danke an @Alec Gorge
Ich hatte ein ähnliches Problem.
Grundsätzlich besteht das Problem darin, dass wahrscheinlich zwei Instanzen von mysql ausgeführt werden.
A) Einer läuft unter /etc/init.d
B) Lampe bei/opt/lamp installiert
Lösung:
Schritt 1: - Suchen Sie nach allen MySQL-Instanzen, die mit dem Befehl "find/| grep mysqld" ausgeführt werden.
Schritt 2: - Beenden Sie die Dienste, die unter /etc/init.d ausgeführt werden, mit dem Dienst mysql stop
Schritt 3: - Starten Sie Ihre Lampendienste mit/opt/lamp/lamp restart neu
Du solltest gut sein :)
Ich habe MySQL mit dem Installer installiert. Tatsächlich gab es neben dem 'bin'-Verzeichnis kein Datenverzeichnis.
Ich manuell erstellt das "Daten" -Verzeichnis unter "C:\Programme\MySQL\MySQL Server 8.0". Und es funktionierte (das Root-Passwort wurde nach den Schritten geändert, die auf https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/de/resetting-permissions-windows.html vorgeschlagen wurden.
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, als ich die Seite "Server Status" in MySQL Workbench durchgesehen habe. Wenn sich Ihr Socket nicht in /tmp/mysql.sock befindet, könnte MySQL Workbench Ihnen vielleicht sagen, wo er ist? (Zugegeben, Sie verwenden MySQL Workbench ...)
Überprüfen Sie auf einem Mac vor der harten Arbeit einfach Ihre Einstellungen in System Preferences > MySQL
. Meistens habe ich das Team seit The MySQL Server Instance is stopped
mit diesem Problem konfrontiert.
Klicken Sie auf die Schaltfläche Start MySQL Server
. Die Magie wird geschehen.