Ich möchte den mysql
Verkehr analysieren . Im Moment werden alle MySQL-Anfragen an den MySQL-Unix-Socket gesendet:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
Ich versuche, diesen Socket zu deaktivieren, um MySQL zu zwingen, den Netzwerksocket stattdessen im Loopback zu verwenden. Ich habe versucht, alle socket
Anweisungen in den my.cnf
und debian.cnf
-Dateien auszukommentieren und MySQL neu gestartet, aber es machte keinen Unterschied.
Wie kann ich den MySQL-Unix-Socket deaktivieren, um MySQL über das Netzwerk zu erzwingen?
Zusatzinfo: Ich laufe MySQL 5.1
weiter ubuntu 10.04
.
Präzisierungen zur Frage Da viele Leute vorgeschlagen haben, den Netzwerk-Socket zu aktivieren, möchte ich meine Frage klären, indem ich darauf hinweise, dass die Bindungsadresse bereits aktiviert wurde bind-address = 127.0.0.1
und eine Abhörverbindung verfügbar ist:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld
Trotzdem sehe ich keine Verbindungsversuche 127.0.0.1:3306
von meiner Webapp (Drupal-Website).
Aktualisiert mit der Antwort
Es scheint in der Tat, dass das Problem von dem mysqli
Connector stammt, den Drupal verwendet ( .ht_config.php
für diejenigen, die interessiert sind). Es wurde festgelegt :, geändert mysqli://drupal:***@localhost/drupal
, localhost
um 127.0.0.1
das Problem zu beheben (dh Drupal stellt jetzt Verbindungen zum Netzwerk-Socket her).
--protocol
... siehe Jonathans Antwort.Unter Linux und anderen * Nixen geht MySQL davon aus, dass Sie einen Socket verwenden möchten, wenn Sie eine Verbindung zum Host "localhost" herstellen (dies wäre der Standard-Hostname).
Sie können dies auf drei Arten außer Kraft setzen: 1) Geben Sie einen anderen Hostnamen wie 127.0.0.1 (
mysql -h 127.0.0.1
) oder den tatsächlichen Hostnamen Ihres Servers an. 2) Geben Sie an, dass Sie TCP verwenden möchten und keinen Socket (mysql --protocol tcp
).Sie können auch einfach festlegen, dass die my.cnf standardmäßig so bearbeitet wird, dass sie Folgendes enthält ([client] bedeutet einen beliebigen Client:
Die vollständige Beschreibung, wie MySQL entscheidet, wie eine Verbindung hergestellt werden soll, finden Sie hier:
http://dev.mysql.com/doc/refman/5.5/en/connecting.html
quelle
Ist das nicht wirklich ein Kundenproblem? Wenn Sie das Programm mysql verwenden, können Sie den
--protocol
Schalter verwenden. Von der ManpageIch habe es versucht
während der Überwachung von Port 3306 mit
tcpdump -i lo tcp port 3306
und ich kann den Verkehr sehen, während, wenn ich gerade laufenIch sehe (richtig) keinen Verkehr auf Port 3306.
BEARBEITEN:
Jetzt, da Sie uns mitteilen, dass Sie DRUPAL verwenden, ist die Lösung relativ einfach.
Gehen Sie zu
sites/<sitename>
odersites/default
und bearbeiten Sie diesettings.php
DateiSie finden eine Struktur wie diese
Ändern Sie das
'localhost'
in'127.0.0.1'
und speichern Sie die Datei.quelle
no control
ich sagte, ich sei dramatisch. Ich könnte die.ht_config.php
Datei ändern und das Problem beheben..ht_config.php
stattsettings.php
. Ich weiß nicht warum (das Entwicklerteam hat darum gebeten, dass es so sein soll). Jetzt ist das Problem, dass Drupal die.ht_config.php
Datei bei jeder Anfrage zu lesen scheint (wenn ich sie ändere, werden Änderungen sofort berücksichtigt), was bei den Performances nicht helfen kann. Wir werden nach einer Möglichkeit suchen, diese Einstellungen auf Anwendungsebene zwischenzuspeichern, aber das ist ein anderes Problem.--protocol=socket
wenn Sie einenhost
Eintrag im[client]
Abschnitt haben, der.my.cnf
einenwrong or unknown protocol
Fehler anzeigt. (mysql 5.7.13)Das hört sich vielleicht etwas verrückt an
Versuchen Sie, die Socket-Datei auf einen absoluten Pfad festzulegen, dessen Pfad sich auf einem anderen Computer befindet
http://dev.mysql.com/doc/refman/5.0/de/server-options.html#option_mysqld_socket
Andernfalls können Sie dieses Standardverhalten nicht umgehen, da für die Kommunikation mit mysqld eine Socket-Datei vorhanden sein muss.
quelle
Bearbeiten Sie die Datei my.cnf und fügen Sie die Direktive hinzu
oder Ihre bevorzugte IP-Adresse, um den Zugriff über das Netzwerk zu ermöglichen. Starten Sie mysql danach neu, damit es funktioniert.
quelle
Wenn Sie den NULL-Wert oder die Zeichenfolge "localhost" ( http://www.php.net/manual/en/mysqli.construct.php ) eingeben, verwendet der MySQL-Client eine Unix-Socket-Datei anstelle des TCP-Netzwerks.
Es scheint, dass der sqlyog-Client immer das TCP-Netzwerk verwendet, auch wenn Sie "localhost" eingeben
quelle
Ich musste /etc/my.cnf löschen (nachdem ich es gesichert hatte) und dann den Server neu starten. Dann konnte ich mich mit einer Steckdose verbinden und der Fehler verschwand.
quelle