Das ist mir ein Rätsel. Die einzige Möglichkeit, eine Verbindung zu MySQL herzustellen, besteht darin, dass ich sie über "127.0.0.1" aufrufe. Mein PHP-Verbindungsskript funktioniert beispielsweise NICHT mit localhost
Ich verwende Mac OS X Lion, Apache2, MySQL, PHP und phpMyAdmin
mysqladmin:
count 0
debug-check FALSE
debug-info TRUE
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set auto
host (No default value)
no-beep FALSE
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-verify-server-cert FALSE
user (No default value)
verbose FALSE
vertical FALSE
connect-timeout 43200
shutdown-timeout 3600
plugin-dir (No default value)
default-auth (No default value)
ping localhost
sehen, was darin steht.Antworten:
MySQL versucht, eine Verbindung zum Unix-Socket herzustellen, wenn Sie ihm mitteilen, dass er eine Verbindung zu "localhost" herstellen soll. Wenn Sie ihm mitteilen, dass er eine Verbindung zu 127.0.0.1 herstellen soll, wird er gezwungen, eine Verbindung zum Netzwerk-Socket herzustellen. Wahrscheinlich haben Sie MySQL so konfiguriert, dass nur der Netzwerk-Socket und nicht der Dateisystem-Socket abgehört wird.
Was genau mit deinem Unix-Socket los ist, ist schwer zu sagen. Ich empfehle Ihnen jedoch, diese Seite im MySQL-Referenzhandbuch zu lesen . Dies sollte Ihnen helfen.
UPDATE: Basierend auf der aktualisierten Frage: Der Parameter "socket" sollte ungefähr so lauten: "/var/lib/mysql/mysql.sock". Diese Seite im Referenzhandbuch enthält weitere Informationen.
Hier haben Sie den Anfang meiner /etc/my.cnf-Datei:
Ihre Datei sollte ähnlich sein. Dann sollte Ihr Problem gelöst sein. Vergessen Sie nicht, den MySQL-Server neu zu starten, bevor Sie ihn testen.
quelle
Möglicherweise haben Sie IPv6 aktiviert. Der sehr mögliche Localhost wird in den IPv6-Localhost aufgelöst, der in Ihrer msql-Konfiguration nicht definiert ist.
ive hatte auch ein Problem, bei dem ich 'localhost' anstelle von '127.0.0.1' zu den zulässigen Subnetzen für diesen Benutzer hinzufügen musste.
quelle
Für mich ist das in OSX integrierte PHP so konfiguriert, dass es einen anderen Unix-Socket als das MySQL von Homebrew verwendet. Daher kann keine Verbindung über localhost hergestellt werden, der diesen Socket verwendet.
Ich habe es mit einem schnellen Hack behoben, indem ich den von PHP konfigurierten Socket-Pfad so verknüpft habe, dass er auf den zeigt, den MySQL tatsächlich verwendet.
Die folgenden Diagnosebefehle waren sehr hilfreich.
Überprüfen Sie die von PHP und MySQL verwendeten Standard-Socket-Pfade:
Stellen Sie eine Verbindung über eine bestimmte Steckdose her:
Bestimmen Sie, welche Art von Socket-MySQL-Client verwendet, um eine Verbindung herzustellen:
quelle
Könnten Sie überprüfen
mysql/conf/my.conf
(die Verzeichnisstruktur sollte unter OSx ziemlich gleich sein), ob keine Kommentare vorhandenskip-networking
sind?#
Fügen Sie in diesem Fall ein vor der Zeile ein und starten Sie den mysql-server neu.Ich hatte tatsächlich vor einiger Zeit ein ähnliches Problem (obwohl das nicht in OSx war), also dachte ich, dass es einen Versuch wert sein könnte.
quelle
PHP versucht immer noch, den Standard-Socket-Speicherort zu verwenden. Dieses Problem kann auftreten, wenn Sie den Ordner MariaDB / MySQL von / var / lib / mysql an einen anderen Speicherort verschoben haben . Um das Problem zu lösen, müssen Sie den Speicherort des neuen Sockets in der Datei /etc/php.ini definieren .
Achten Sie darauf, je nachdem, welchen Treiber Sie verwenden, müssen Sie möglicherweise pdo_mysql.default_socket = angeben !
Um Ihr aktuelles Verzeichnis zu überprüfen, führen Sie den folgenden Befehl in mysql aus:
quelle
Ist localhost in Ihrer
/private/etc/hosts
Datei definiert ?quelle
/private
? Noch nie zuvor gesehenIch konnte die gleichen Symptome auf meiner Testbox nachvollziehen, dies wird hoffentlich helfen.
In MySQL werden Benutzer durch zwei Teile (Name und Host) definiert. Standardmäßig hat MySQL drei Root-Benutzer:
Das Passwortfeld ist entweder leer (kein Passwort) oder es ist ein Hash gespeichert. Wenn Sie das Passwort für einen bestimmten Benutzer festlegen, werden nicht alle automatisch aktualisiert, da MySQL sie als unterschiedliche Benutzer ansieht.
Beispielsweise:
aktualisiert das Passwort für
'root'@'127.0.0.1'
, aber nicht für'root'@'localhost'
oder'root'@'localhost.localdomain'
Schauen Sie sich die
skip_name_resolve
Variable an:Standardmäßig
skip_name_resolve
istOFF
und versucht, alle IP-Adressen in Hostnamen aufzulösen. Wenn Sie sich beispielsweise als verbinden'root'@'127.0.0.1'
, ändert MySQL Ihre Verbindung als'root'@'localhost'
.Wenn es
ON
wird MySQL sehen und verbinden'root'@'127.0.0.1'
und'root'@'localhost'
als separater Benutzer. Je nachdem, wie sie festgelegt wurden, können sie unterschiedliche Kennwörter haben oder auch nicht.Daher würde ich zuerst prüfen, ob sich das Passwort unterscheidet:
mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
Wenn dies der Fall ist, können Sie sie beheben oder die Untersuchung fortsetzen.
Dann würde ich prüfen
skip_name_resolve
:mysql> show variables like 'skip_name_resolve';
Wenn dies der Fall ist
ON
, würde ich herausfinden, wo es festgelegt ist (zum Beispiel/etc/my.cnf
) und es entfernen, sofern es nicht erforderlich ist.Hoffentlich hilft dir das!
quelle
Ich hatte dieses Problem und konnte es nicht herausfinden. Ich habe alles versucht, was ich konnte, ohne Erfolg.
Ich stellte fest, dass ich ein .netrc in / root / hatte, das Informationen enthielt.
Ich habe es gelöscht und das Problem ist weg.
Es ist jetzt möglich, sich mit mysql -uroot -p ohne Probleme bei mysql anzumelden.
Ich weiß, dass dies ein alter Beitrag ist, hoffe aber, dass dies jemandem hilft.
quelle
Für mich hat das Ändern der Berechtigungen, die für das übergeordnete Verzeichnis von mysql.sock öffentlich lesbar sein sollen, das Problem behoben:
quelle
Für Benutzer von CageFS mit CloudLinux:
Ich habe es neu erstellt,
/var/lib/mysql
weil ich den MySQL-Server von Grund auf neu erstellt habe ...welches den Pfad von cagefs ausgehängt hat. Ich weiß, dass es nichts damit zu tun hat, aber ich habe cPanel und CloudLinux verwendet. Ich konnte nicht überprüfen, warum die Socket-Verbindung nicht funktioniert, und schließlich wurde mir klar.
Hinzufügen
/var/lib/mysql
zu/etc/cagefs/cagefs.mp
(falls bereits vorhanden, fahren Sie mit dem nächsten Schritt fort) und AusführenProblem behoben
quelle
/etc/cagefs/cagefs.mp
aber es wurde repariertcagefsctl --remount-all
. Danke, Mann!Sie müssen es in private / etc / hosts definieren, denke ich ... oder verwenden Sie einfach 127.0.0.1, weil es sowieso dasselbe ist, nur ein Alias.
quelle