it-swarm.com.de

Wie kann man MySQL zwingen, eine Verbindung über TCP anstelle eines Unix-Sockets) herzustellen?

Ich möchte mysql Verkehr analysieren. Derzeit werden alle MySQL-Anforderungen 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 Netzwerk-Socket stattdessen für den Loopback zu verwenden. Ich habe versucht, alle socket -Anweisungen in den Dateien my.cnf Und debian.cnf Auskommentieren und MySQL neu gestartet, aber es machte keinen Unterschied.

Wie kann ich den MySQL-Unix-Socket deaktivieren, um MySQL über das Netzwerk zu erzwingen?

zusätzliche Informationen: Ich führe MySQL 5.1 auf ubuntu 10.04 aus.

Präzisionen 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 mit bind-address = 127.0.0.1 Aktiviert wurde und dass eine Abhörverbindung verfügbar ist:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      15601/mysqld 

Ich sehe immer noch keine Verbindungsversuche zu 127.0.0.1:3306 Von meiner Webanwendung (Drupal-Website).

Aktualisiert mit der Antwort

Es scheint tatsächlich, dass das Problem vom mysqli Connector kommt, den Drupal verwendet (in .ht_config.php Für diejenigen, die interessiert sind). Es wurde gesetzt: mysqli://drupal:***@localhost/drupal Durch Ändern von localhost in 127.0.0.1 Wurde das Problem behoben (dh Drupal stellt jetzt Verbindungen zum Netzwerk-Socket her).

47
Max

Verwenden Sie eine IP-Bindung an 127.0.0.1. Das sollte einen Listening-Port auf localhost aktivieren. Verwenden Sie auf der Clientseite nicht localhost - verwenden Sie 127.0.0.1 stattdessen. Viele Clients verfügen über einen internen Alias, mit dem sie eine Verbindung zum Socket herstellen können, wenn Sie localhost als Ziel angeben.

MySQL ist seltsam.

53
Nils

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 Standardhostname).

Sie können dies auf drei Arten überschreiben: 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 und kein Socket (mysql --protocol tcp)

Sie können auch einfach festlegen, dass meine my.cnf standardmäßig so bearbeitet wird, dass sie Folgendes enthält ([client] bedeutet jeden Client:

[client]
protocol=tcp

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

83
Jonathan Amend

Ist das nicht wirklich ein Kundenproblem? Wenn Sie das MySQL-Programm verwenden, können Sie das --protocol Schalter. Von der Manpage

 --protocol={TCP|SOCKET|PIPE|MEMORY}

       The connection protocol to use for connecting to the server. It is
       useful when the other connection parameters normally would cause a
       protocol to be used other than the one you want. For details on the
       allowable values, see Section 4.2.2, “Connecting to the MySQL
       Server”.

Ich habe es versucht

mysql --protocol=TCP -u root -p

während der Überwachung von Port 3306 mit tcpdump -i lo tcp port 3306 und ich kann Verkehr sehen, wenn ich nur renne

mysql  -u root -p

Ich sehe (richtig) keinen Verkehr auf Port 3306.

BEARBEITEN:

Nachdem Sie uns mitgeteilt haben, dass Sie DRUPAL verwenden, ist die Lösung relativ einfach.

Gehe zu sites/<sitename> oder sites/default und bearbeiten Sie die settings.php Datei

Sie finden eine solche Struktur

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'databasename',
      'username' => 'databaseuser',
      'password' => 'databasepassword',
      'Host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

Ändere das 'localhost' bis '127.0.0.1' und speichern Sie die Datei.

16
user9517

Bearbeiten Sie die Datei my.cnf und fügen Sie die Direktive hinzu

bind-address = 127.0.0.1

oder Ihre bevorzugte IP, um sie über das Netzwerk zugänglich zu machen. Starten Sie MySQL danach neu, damit es funktioniert.

1
Chris

der php mysqli-Client verwendet eine Unix-Socket-Datei anstelle eines TCP-Netzwerks, wenn Sie den NULL-Wert oder die Zeichenfolge "localhost" ( http://www.php.net/manual/en/mysqli übergeben .construct.php )

es scheint, dass der sqlyog-Client immer ein TCP-Netzwerk verwendet, auch wenn Sie "localhost" eingeben

1
diyism

Das klingt vielleicht etwas verrückt

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/en/server-options.html#option_mysqld_socket

Andernfalls können Sie dieses Standardverhalten nicht umgehen, da eine Socket-Datei vorhanden sein muss, damit mysqld mit ihm kommunizieren kann.

1
RolandoMySQLDBA

Ich musste /etc/my.cnf löschen (nach dem Sichern) und dann den Server neu starten. Dann konnte ich mich mit einer Steckdose verbinden und der Fehler verschwand.

0
robrecord