Auf Unix hat ein MySQL-Client zwei Möglichkeiten, sich mit dem
mysqld-Server zu verbinden: Entweder
verwendet er eine Unix-Socketdatei (nach Voreinstellung
/tmp/mysql.sock
), um sich über eine Datei
im Dateisystem zu verbinden, oder er verwendet TCP/IP, um sich
über eine Portnummer zu verbinden. Eine Verbindung über eine
Unix-Socketdatei ist schneller als TCP/IP, kann aber nur genutzt
werden, wenn sich der Client mit einem Server auf demselben
Computer verbindet. Der Weg über die Unix-Socketdatei wird
gewählt, wenn Sie keinen Hostnamen oder
localhost
angeben.
Wenn der MySQL Server auf Windows 9x oder Me läuft, können Sie
sich nur per TCP/IP verbinden. Wenn er auf Windows NT, 2000, XP
oder 2003 läuft und mit der Option
--enable-named-pipe
gestartet wird, können Sie
sich auch mit Named Pipes verbinden, wenn der Client auf
demselben Host wie der Server läuft. Der Name der Named Pipe
ist nach Voreinstellung MySQL
. Wenn Sie für
die Verbindung mit mysqld keinen Hostnamen
angeben, versucht ein MySQL-Client als Erstes eine Verbindung
mit der Named Pipe. Wenn das nicht klappt, verbindet er sich mit
dem TCP/IP-Port. Indem Sie .
als Hostnamen
angeben, zwingen Sie Windows zur Verwendung von Named Pipes.
Der Fehler (2002) Can't connect to ...
bedeutet normalerweise, dass auf dem System kein MySQL Server
läuft oder dass Sie bei Ihrem Verbindungsversuch einen
verkehrten Unix-Socketdateinamen oder TCP/IP-Port angegeben
haben.
Prüfen Sie als Erstes, ob auf Ihrem Serverhost ein Prozess namens mysqld läuft. (Hierzu verwenden Sie auf Unix ps xa | grep mysqld und auf Windows den Task- Manager.) Wenn kein solcher Prozess läuft, starten Sie den Server. Siehe hierzu Abschnitt 2.9.2.3, „Probleme mit dem Start des MySQL Servers“.
Läuft ein mysqld-Server, so überprüfen Sie
ihn mit den folgenden Befehlen. Die Portnummer oder der Name der
Unix-Socketdatei können in Ihrem Fall abweichen.
host_ip
ist die IP-Nummer des Computers, auf
welchem der Server ausgeführt wird.
shell>mysqladmin version
shell>mysqladmin variables
shell>mysqladmin -h `hostname` version variables
shell>mysqladmin -h `hostname` --port=3306 version
shell>mysqladmin -h host_ip version
shell>mysqladmin --protocol=socket --socket=/tmp/mysql.sock version
Beachten Sie, dass Backticks anstelle von Anführungszeichen
für den hostname
-Befehl verwendet werden.
Diese sorgen dafür, dass die Ausgabe von
hostname
(also des aktuellen Hostnamens) in
den Befehl mysqladmin eingesetzt wird. Wenn
Sie keinen hostname
-Befehl zur Verfügung
haben oder mit Windows arbeiten, können Sie den Hostnamen Ihres
Computers hinter der Option -h
manuell
eingeben (ohne Backticks). Oder Sie versuchen, sich mit
-h 127.0.0.1
über TCP/IP mit dem lokalen
Host zu verbinden.
Der Fehler Can't connect to local MySQL
server
könnte aus folgenden Gründen auftreten:
mysqld läuft nicht. Vergewissern Sie sich, ob der Prozess mysqld in der Prozessliste Ihres Betriebssystems auftaucht.
Sie führen einen MySQL Server auf Windows mit vielen
TCP/IP-Verbindungen aus. Wenn es häufiger vorkommt, dass
Ihre Clients diesen Fehler melden, finden Sie an folgender
Stelle einen Workaround:
Abschnitt A.2.2.1, „Connection to MySQL server failing on Windows
-Fehler“.
Ihr System verwendet MIT-pthreads. Wenn Sie auf einem System arbeiten, das keine nativen Threads kennt, verwendet mysqld das Package MIT-pthreads (siehe Abschnitt 2.1.1, „Betriebssysteme, die von MySQL unterstützt werden“). Allerdings unterstützen nicht alle MIT-pthreads Unix-Socketdateien. Auf einem System ohne Socketdateiunterstützung müssen Sie bei einer Serververbindung den Hostnamen immer explizit angeben. Versuchen Sie, mit folgendem Befehl die Serververbindung zu überprüfen:
shell> mysqladmin -h `hostname` version
Jemand hat die von mysqld verwendete
Unix-Socketdatei entfernt (standardmäßig
/tmp/mysql.sock
). Vielleicht haben Sie
ja einen cron-Job, der alte Dateien aus
dem Verzeichnis /tmp
löscht. Mit
mysqladmin version können Sie sich
vergewissern, dass die Unix-Socketdatei, die
mysqladmin benötigt, auch tatsächlich
existiert. Wenn dies das Problem ist, müssen Sie den
cron-Job so abändern, dass er
mysql.sock
nicht mehr entfernt, oder
die Socketdatei an einen anderen Ort verlagern. Siehe
Abschnitt A.4.5, „Wie Sie die MySQL-Socketdatei /tmp/mysql.sock
schützen oder ändern“.
Sie haben den mysqld-Server zwar mit der
Option --socket=/path/to/socket
gestartet,
aber vergessen, den Clientprogrammen den neuen Namen der
Socketdatei mitzuteilen. Wenn Sie den Socketpfadnamen für
den Server ändern, müssen Sie auch die MySQL-Clients
entsprechend benachrichtigen. Dies erledigen Sie, indem Sie
dieselbe --socket
-Option einsetzen, wenn
Sie die Clientprogramme ausführen. Außerdem müssen Sie
gewährleisten, dass die Clients ein Zugriffsrecht auf die
mysql.sock
-Datei haben. Um
herauszufinden, wo die Socketdatei liegt, tun Sie Folgendes:
shell> netstat -ln | grep mysql
Siehe Abschnitt A.4.5, „Wie Sie die MySQL-Socketdatei /tmp/mysql.sock
schützen oder ändern“.
Sie arbeiten auf Linux und ein Server-Thread ist ausgefallen
(mit Core Dump). In diesem Fall müssen Sie auch die anderen
mysqld-Threads anhalten (zum Beispiel mit
kill
oder mit dem
mysql_zap
-Skript), bevor Sie den MySQL
Server neu starten können. Siehe
Abschnitt A.4.2, „Was zu tun ist, wenn MySQL andauernd abstürzt“.
Der Server oder das Clientprogramm hat nicht die richtigen
Zugriffsberechtigungen für das Verzeichnis mit der
Unix-Socketdatei oder der Socketdatei selbst. In diesem Fall
müssen Sie die Berechtigungen so ändern, dass der Server
und die Clients an diese Dateien herankommen, oder
mysqld mit einer
--socket
-Option neu starten, die eine
Socketdatei in einem Verzeichnis angibt, wo der Server sie
anlegen kann und die Clients auf sie zugreifen können.
Wenn Sie die Fehlermeldung Can't connect to MySQL
server on some_host
bekommen, können Sie mit
folgenden Mitteln herausfinden, wo das Problem liegt:
Prüfen Sie, ob der Server auf diesem Host läuft, indem Sie
telnet some_host 3306
ausführen und dann
die Eingabetaste einige Male drücken. (3306 ist die
Standardnummer für den MySQL-Port. Ändern Sie den Wert,
wenn Ihr Server einen anderen Port verwendet.) Wenn ein
MySQL Server auf diesem Port läuft und lauscht, müssten
Sie eine Antwort bekommen, die auch die Versionsnummer des
Servers angibt. Erhalten Sie stattdessen einen Fehler wie
beispielsweise telnet: Unable to connect to remote
host: Connection refused
, dann ist auf dem
angegebenen Port kein Server zu erreichen.
Wenn der Server auf dem lokalen Host läuft, können Sie
versuchen, sich per mysqladmin -h localhost
variables über die Unix-Socketdatei zu verbinden.
Überprüfen Sie, auf welcher TCP/IP-Portnummer der Server
lauscht (also den Wert der Variablen
port
).
Vergewissern Sie sich, dass der
mysqld-Server nicht mit der Option
--skip-networking
gestartet wurde.
Ansonsten können Sie sich nicht per TCP/IP verbinden.
Vergewissern Sie sich, dass keine Firewall den Zugriff auf MySQL verhindert. Anwendungen wie ZoneAlarm und die Windows XP-Firewall müssen unter Umständen speziell konfiguriert werden, damit sie den externen Zugriff auf einen MySQL Server erlauben.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.