Sie können mit 'localhost' keine Verbindung zu MySQL herstellen, aber mit '127.0.0.1' ist es in Ordnung?

11

Meine / etc / hosts-Datei sieht folgendermaßen aus:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Beim Erstellen des Servers stellte ich fest, dass ich in bestimmten Konfigurationsdateien für Dienste wie Postfix, Apache und Dovecot, obwohl ich localhost erfolgreich pingen konnte, angeben musste, 127.0.0.1anstatt localhost, damit sie funktionieren.

Ich musste auch die Konfigurationsdateien bestimmter datenbankgesteuerter Websites ändern, die für localhostdie Verbindung mit MySQL verwendet wurden.

Ich habe verschiedene Änderungen an der hostsDatei versucht , aber nichts, was ich bisher versucht habe, hat geholfen.

Auf dem Server wird Ubuntu 12.04.02 LTS ausgeführt. Selinux ist nicht installiert, und die oben genannte Situation bleibt auch nach dem Festlegen der Standardrichtlinien für IPtables bestehen, um diese zu akzeptieren und zu löschen.

Peter Snow
quelle

Antworten:

14

Möglicherweise überprüfen Sie Folgendes: Sie müssen sich bei der MySQL-Konsole anmelden . Stellen Sie sicher, dass Sie über Berechtigungen zum Anmelden rootüber verfügen localhost.

mysql -h 127.0.0.1 -u root -p

- Sobald Sie sich erfolgreich angemeldet haben -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Wirf es einfach raus, nur für den Fall, dass es darum geht.

Drawrockshard
quelle
Ich habe das Gefühl, Sie sind auf dem richtigen Weg. Ich habe das getan und ich kann sehen, dass obwohl root und einige andere Benutzer für localhost erstellt wurden, die vom Hosting Control Panel für Benutzer erstellten alle für 127.0.0.1(außer einem, der ist %) sind. Ich denke, dies zeigt wahrscheinlich genug, damit ich es beheben kann, also werde ich Ihre Antwort wahrscheinlich in Kürze akzeptieren.
Peter Snow
Danke für die Hilfe! Ich möchte hinzufügen, dass nach dem Aktualisieren der Tabelle mysql.user ein Neustart des MySQL-Servers erforderlich ist, damit die Änderung wirksam wird.
lackovic10
Obwohl akzeptiert, ist dies normalerweise nicht (jemals?) Das Problem für MySQL. Siehe stattdessen die Antwort der EEAA (MySQL interpretiert localhostals socketstatt TCP).
ToolmakerSteve
8

Die meisten MySQL-Clients sind insofern seltsam, als sie, wenn Sie den Host als angeben localhost, diesen Alias ​​für eine Socket-Verbindung anstelle einer TCP-Verbindung verwenden. Sie können entweder bleiben 127.0.0.1oder, wenn der Client dies unterstützt (wie es die MySQL-CLI-Binärdatei mit dem --protocolFlag tut ), die Verwendung von TCP anstelle eines Unix-Sockets erzwingen.

EEAA
quelle
Danke EEAA. Das Problem ist, dass Dinge wie das Joomla-Installationsprogramm fehlschlagen. Wenn Sie während der Installation 127.0.0.1anstelle des localhostFelds Hostname angeben , werden die Installationspfade durcheinander gebracht, was zu anderen Fehlern führt. Wenn Sie jedoch localhost angeben , kann die Datenbank nicht verbunden werden! Was hat diese Situation verursacht? Warum habe ich es?
Peter Snow
3
@PeterSnow Richten Sie in Ihrer MySQL-Konfiguration einen Unix-Domain-Socket ein.
Michael Hampton
Danke @MichaelHampton Ich habe die letzte halbe Stunde gesucht und kann nicht finden, wie ich das einrichten soll. Können Sie mich auf einen Artikel verweisen oder mir bitte eine Idee geben? Ich habe socket = /var/run/mysqld/mysqld.sockin my.cnfund die Datei ist vorhanden, im Besitz von MySQL mit Berechtigungen 777. Danke.
Peter Snow
@PeterSnow Haben Sie mysqld nach dieser Änderung neu gestartet?
EEAA
Derzeit versuche ich, es über das Joomla-Installationsskript zu verwenden. Die http-Seite fragt nach dem Hostnamen. Wenn ich es wähle 127.0.0.1, funktioniert es (aber das Skript verwendet den Eintrag später und schlägt fehl, weil es einen auflösbaren Namen wie erwartet localhost), aber wenn ich das localhostVerbinden verwende, um die Datenbank zu erstellen, schlägt dies fehl.
Peter Snow
1

Sie können die Berechtigung wie folgt überprüfen:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Wenn dies 0 0.0.0.0:* abhört, bedeutet dies, dass jeder auf diese MySQL zugreifen kann.

Sie können die Bindung hierfür in der Datei my.conf bearbeiten. In Linux ist der Standardpfad dafür:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Fügen Sie diese Zeilen in die Datei my.conf ein, um die gewünschte IP-Adresse zuzulassen.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0
a_Lerner
quelle
Vielen Dank an a_learner für die Informationen, obwohl ich bereits eine Antwort akzeptiert habe.
Peter Snow
0

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 .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock
joelschmid
quelle
0

Ich habe dieses Problem durch Erstellen eines Symlinks gelöst sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Aber zuerst muss ich einen Ordner erstellen, /var/run/mysqld/da der Ordner anfangs nicht existierte.

Saharul
quelle
-1

Sie benötigen eine mysql.sock in / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

sollte danach gut funktionieren.

Wilhelm
quelle