Dieser Abschnitt enthält Vorschläge zur Fehlersuche, wenn unter Unix Probleme beim Start des Servers auftreten. Wenn Sie Windows verwenden, finden Sie Informationen in Abschnitt 2.3.14, „Troubleshooting einer MySQL-Installation unter Windows“.
Haben Sie Probleme beim Starten des Servers, dann probieren Sie folgende Schritte:
Suchen Sie im Fehlerlog nach Ursachen dafür, dass der Server nicht startet.
Geben Sie alle Sonderoptionen an, die von den von Ihnen verwendeten Speicher-Engines benötigt werden.
Stellen Sie sicher, dass der Server die Position des Datenverzeichnisses kennt.
Stellen Sie auch sicher, dass der Server auf das Datenverzeichnis zugreifen kann. Besitzrechte und Berechtigungen für das Datenverzeichnis und seine Inhalte müssen so konfiguriert sein, dass der Server sie lesen und ändern kann.
Überprüfen Sie, ob die Netzwerkschnittstellen, die der Server verwenden will, vorhanden sind.
Einige Speicher-Engines haben Optionen, die ihr Verhalten
steuern. Sie können eine Datei my.cnf
erstellen und darin die Startoptionen der Engines angeben, die
Sie zu verwenden beabsichtigen. Wenn Sie Speicher-Engines
verwenden wollen, die transaktionssichere Tabellen
(InnoDB
, BDB
,
NDB
) unterstützen, dann vergewissern Sie
sich, dass diese wie gewünscht konfiguriert sind, bevor Sie
den Server starten:
Wenn Sie InnoDB
-Tabellen verwenden,
finden Sie Informationen in
Abschnitt 14.2.3, „Konfiguration“.
Setzen Sie BDB
-Tabellen
(BerkeleyDB-Tabellen) ein, dann finden Sie Informationen
in Abschnitt 14.5.3, „BDB-Startoptionen“.
Wenn Sie MySQL-Cluster verwenden, finden Sie Informationen in Abschnitt 16.4, „MySQL Cluster: Konfiguration“.
Speicher-Engines verwenden, sofern keine Optionswerte definiert sind, die Vorgabewerte. Wir empfehlen deswegen, die verfügbaren Optionen zu prüfen und explizite Werte für diejenigen Optionen anzugeben, bei denen die Vorgabewerte nicht für Ihre Installation geeignet sind.
Wenn der mysqld-Server startet, wechselt er in das Datenverzeichnis. In diesem Verzeichnis erwartet er das Vorhandensein der Datenbanken, und hier wird er auch seine Logdateien speichern. Auch die PID-Datei (Process ID, Prozesskennung) wird im Datenverzeichnis abgelegt.
Das Datenverzeichnis wird bei der Kompilierung des Servers
fest zugeordnet. Standardmäßig sucht der Server deswegen an
der angegebenen Position nach diesem Verzeichnis. Befindet
sich das Datenverzeichnis in Ihrem System an anderer Stelle,
dann funktioniert der Server nicht einwandfrei. Durch Aufruf
des Befehls mysqld mit den Optionen
--verbose
und --help
können
Sie die Vorgaben für die Pfadeinstellungen ermitteln.
Wenn die Standardpositionen dem MySQL-Installationslayout auf Ihrem System nicht entsprechen, können Sie sie durch Angabe von Optionen für mysqld oder mysqld_safe auf der Befehlszeile oder in einer Optionsdatei außer Kraft setzen.
Um die Position des Datenverzeichnisses explizit anzugeben,
verwenden Sie die Option --datadir
.
Allerdings können Sie mysqld die Position
des Basisverzeichnisses angeben, in dem MySQL installiert ist;
mysqld wird dann in diesem Verzeichnis nach
dem Datenverzeichnis suchen. Die Angabe erfolgt mit der Option
--basedir
.
Um die Auswirkungen der Optionen zur Pfadangabe zu
überprüfen, rufen Sie mysqld mit diesen
Optionen auf, gefolgt von den Optionen
--verbose
und --help
. Wenn
Sie beispielsweise in das Verzeichnis wechseln, in dem
mysqld installiert ist, und dann den
folgenden Befehl ausführen, werden die Auswirkung des
Serverstarts bei einem Basisverzeichnis
/usr/local
angezeigt:
shell> ./mysqld --basedir=/usr/local --verbose --help
Sie können auch andere Optionen wie
--datadir
spezifizieren; beachten Sie aber,
dass --verbose
und --help
jeweils als letzte Optionen aufzuführen sind.
Wenn Sie die gewünschten Pfadeinstellungen ermittelt haben,
starten Sie den Server ohne --verbose
und
--help
.
Wird mysqld gerade ausgeführt, dann können Sie die verwendeten Pfadeinstellungen durch Absetzen des folgenden Befehls ermitteln:
shell> mysqladmin variables
Oder:
shell> mysqladmin -h host_name
variables
host_name
ist der Name des MySQL
Server-Hosts.
Erhalten Sie beim Starten von mysqld die
Fehlermeldung Errcode 13
(Permission denied
, Berechtigung
verweigert), dann gestatten die Berechtigungen des
Datenverzeichnisses oder seiner Inhalte keinen Serverzugriff.
In diesem Fall ändern Sie die Berechtigungen für die
betreffenden Dateien und Verzeichnisse so, dass der Server das
Recht hat, sie zu verwenden. Sie können den Server auch als
root
starten, wovon aus
sicherheitstechnischer Sicht jedoch dringend abgeraten wird.
Wechseln Sie unter Unix in das Datenverzeichnis und
überprüfen Sie die Besitzrechte für das Datenverzeichnis
und seinen Inhalt, um den Serverzugriff zu gewährleisten.
Verwenden Sie etwa folgenden Befehl, wenn das Datenverzeichnis
/usr/local/mysql/var
ist:
shell> ls -la /usr/local/mysql/var
Wenn die Besitzrechte für das Datenverzeichnis oder seine
Unterverzeichnisse nicht bei dem Anmeldekonto liegen, das Sie
zur Ausführung des Servers verwenden, dann müssen Sie die
Besitzrechte für diese Ressourcen dem Konto zuweisen. Heißt
das Konto mysql
, dann verwenden Sie
folgende Befehle:
shell>chown -R mysql /usr/local/mysql/var
shell>chgrp -R mysql /usr/local/mysql/var
Wenn der Server nicht korrekt startet, prüfen Sie das
Fehlerlog. Logdateien befinden sich im Datenverzeichnis (unter
Windows normalerweise C:\Programme\MySQL\MySQL
Server 5.1\data
, bei
Unix-Binärdistributionen in
/usr/local/mysql/data
und bei
Unix-Quelldistributionen in
/usr/local/var
). Suchen Sie im
Datenverzeichnis nach Dateien mit Namen des Typs
und
host_name
.err
,
wobei host_name
.loghost_name
der Name des
Serverhosts ist. Überprüfen Sie nun die letzten paar Zeilen
dieser Dateien. Unter Unix können Sie sie mit
tail
anzeigen:
shell>tail
shell>host_name
.errtail
host_name
.log
Das Fehlerlog sollte Informationen dazu enthalten, warum der Server nicht starten konnte. Beispielsweise könnte das Log etwa Folgendes enthalten:
000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed 000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory 000729 14:50:10 Can't init databases
Das bedeutet, dass Sie mysqld nicht mit der
Option --bdb-no-recover
gestartet haben;
Berkeley DB hat dann, als es versuchte, Ihre Datenbanken
wiederherzustellen, Ungereimtheiten in Bezug auf die eigenen
Logdateien erkannt. Um fortzufahren, sollten Sie die alten
Berkeley DB-Logdateien aus dem Datenbankverzeichnis an einen
anderen Ort verschieben, wo Sie sie später untersuchen
können. Die BDB
-Logdateien werden in
chronologischer Reihenfolge beginnend mit
log.0000000001
benannt; die Zahl im Namen
wird dabei stets erhöht.
Wenn Sie mysqld mit Unterstützung für
BDB
-Tabellen ausführen und beim Start von
mysqld ein Speicherauszug auftritt, könnte
dies auf Probleme in Verbindung mit dem
BDB
-Wiederherstellungslog hinweisen. In
diesem Fall können Sie versuchen, mysqld
mit der Option --bdb-no-recover
zu starten.
Wenn das klappt, sollten Sie alle
BDB
-Logdateien aus dem Datenverzeichnis
entfernen und dann versuchen, mysqld ohne
die Option --bdb-no-recover
neu zu starten.
Tritt einer der folgenden Fehler auf, dann bedeutet dies, dass ein anderes Programm (vielleicht ein anderer mysqld-Server) den TCP/IP-Port bzw. die Unix-Socketdatei verwendet, die mysqld für sich beansprucht:
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket ...
Ermitteln Sie mit dem Befehl ps, ob ein anderer mysqld-Server ausgeführt wird. Ist dies der Fall, dann fahren Sie den Server herunter, bevor Sie mysqld erneut starten. (Wenn ein anderer Server ausgeführt wird und Sie tatsächlich mehrere Server gleichzeitig betreiben wollen, finden Sie Informationen zur Vorgehensweise in Abschnitt 5.13, „Mehrere MySQL-Server auf derselben Maschine laufen lassen“.)
Läuft kein anderer Server, dann führen Sie den Befehl
telnet
aus.
(Die Standardportnummer von MySQL ist 3306.) Betätigen Sie
dann mehrfach die Eingabetaste. Erhalten Sie keine
Fehlermeldung in der Art von your_host_name
tcp_ip_port_number
telnet: Unable to
connect to remote host: Connection refused
, dann
verwendet ein anderes Programm den TCP/IP-Port, den
mysqld nutzen will. Sie müssen dann ermitteln,
welches Programm dies ist, und es deaktivieren; alternativ
können Sie mysqld mit der Option
--port
auch anweisen, an einem anderen Port
zu lauschen. In diesem Fall müssen Sie auch die Portnummer
für Clientprogramme angeben, die über TCP/IP eine Verbindung
mit dem Server herstellen wollen.
Ein anderer Grund, warum kein Zugriff auf den Port möglich ist, könnte eine laufende Firewall sein, die Verbindungen zu diesem Port unterbindet. In diesem Fall müssen Sie die Firewall-Einstellungen so abändern, dass ein Zugriff möglich ist.
Wenn der Server startet, Sie aber keine Verbindung zu ihm
herstellen können, dann sollten Sie sicherstellen, dass ein
Eintrag wie der folgende in /etc/hosts
vorhanden ist:
127.0.0.1 localhost
Dieses Problem tritt nur bei Systemen auf, die über keine funktionierende Thread-Bibliothek verfügen und für die MySQL zur Verwendung von MIT-pthreads konfiguriert sein muss.
Wenn Sie mysqld nicht zum Laufen bringen,
können Sie versuchen, unter Verwendung der Option
--debug
eine Trace-Datei zu erstellen, um das
Problem zu ermitteln. Siehe auch
Abschnitt E.1.2, „Trace-Dateien erzeugen“.
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.