Der Zweck des Skripts mysql_install_db besteht in der Generierung neuer MySQL-Berechtigungstabellen. Hierbei werden vorhandene MySQL-Berechtigungstabellen nicht überschrieben, und auch andere Daten werden nicht beeinträchtigt.
Wollen Sie Ihre Berechtigungstabellen neu erstellen, dann
beenden Sie zunächst den mysqld-Server,
sofern dieser läuft. Benennen Sie das Verzeichnis
mysql
im Datenverzeichnis dann um, um es
zu speichern, und führen Sie nachfolgend
mysql_install_db aus. Nehmen wir an, Ihr
aktuelles Verzeichnis ist das MySQL-Installationsverzeichnis,
mysql_install_db befindet sich im
Verzeichnis bin
und das Datenverzeichnis
heißt data
. Um die
mysql
-Datenbank umzubenennen und
mysql_install_db erneut auszuführen,
verwenden Sie die folgenden Befehle:
shell>mv data/mysql data/mysql.old
shell>bin/mysql_install_db --user=mysql
Wenn Sie mysql_install_db ausführen, können die folgenden Probleme auftreten:
mysql_install_db kann die Grant-Tabellen nicht installieren.
Unter Umständen stellen Sie fest, dass mysql_install_db die Grant-Tabellen nicht installieren kann und nach Anzeige der folgenden Meldungen beendet wird:
Starting mysqld daemon with databases from XXXXXX mysqld ended
In diesem Fall sollten Sie die Fehlerlogdatei sehr
aufmerksam lesen. Das Fehlerlog sollte sich im Verzeichnis
XXXXXX
befinden (dieses ist nach der
Fehlermeldung benannt) und angeben, warum
mysqld nicht gestartet wurde. Wenn Sie
nicht verstehen, was geschehen ist, hängen Sie das Log
an, wenn Sie einen Bugreport einsenden. Siehe auch
Abschnitt 1.8, „Wie man Bugs oder Probleme meldet“.
Ein mysqld-Prozess wird ausgeführt.
Dies weist darauf hin, dass der Server läuft und die Grant-Tabellen wahrscheinlich bereits erstellt wurden. In diesem Fall müssen Sie mysql_install_db überhaupt nicht ausführen, da es nur einmal gestartet werden muss (nämlich dann, wenn Sie MySQL zum ersten Mal installieren).
Die Installation eines zweiten mysqld-Servers schlägt fehl, wenn ein Server bereits läuft.
Dies kann passieren, wenn eine MySQL-Installation bereits vorhanden ist, Sie aber eine neue Installation an einer anderen Position ablegen wollen. So haben Sie vielleicht eine Produktionsinstallation, wollen aber eine zweite Installation zu Testzwecken einrichten. Meist tritt dieses Problem auf, wenn Sie einen zweiten Server ausführen wollen, der auf eine Netzwerkschnittstelle zuzugreifen versucht, die bereits vom ersten Server verwendet wird. In diesem Fall werden Sie eine der folgenden Fehlermeldungen sehen:
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket ...
Anweisungen zur Einrichtung mehrerer Server finden Sie in Abschnitt 5.13, „Mehrere MySQL-Server auf derselben Maschine laufen lassen“.
Sie haben keinen Schreibzugriff auf
das Verzeichnis /tmp
.
Wenn Sie keinen Schreibzugriff erhalten, um
Temporärdateien oder eine Unix-Socketdatei im
Standardverzeichnis (/tmp
) zu
erstellen, dann tritt ein Fehler auf, wenn Sie
mysql_install_db oder den
mysqld-Server ausführen wollen.
Sie können verschiedene Positionen für das
Temporärverzeichnis und die Unix-Socketdatei angeben,
indem Sie die folgenden Befehle vor dem Starten von
mysql_install_db oder
mysqld ausführen (hierbei ist
some_tmp_dir
der vollständige
Pfadname eines Verzeichnisses, für das Sie Schreibzugriff
haben):
shell>TMPDIR=/
shell>some_tmp_dir
/MYSQL_UNIX_PORT=/
shell>some_tmp_dir
/mysql.sockexport TMPDIR MYSQL_UNIX_PORT
Danach sollten Sie in der Lage sein, mysql_install_db mit den folgenden Befehlen auszuführen und den Server zu starten:
shell>bin/mysql_install_db --user=mysql
shell>bin/mysqld_safe --user=mysql &
Wenn sich mysql_install_db im
Verzeichnis scripts
befindet, ändern
Sie den ersten Befehl zu
scripts/mysql_install_db
.
Siehe auch
Abschnitt A.4.5, „Wie Sie die MySQL-Socketdatei /tmp/mysql.sock
schützen oder ändern“,
und Anhang F, Umgebungsvariablen.
Es gibt einige Alternativen zur Ausführung des Skripts mysql_install_db, welches Bestandteil der MySQL-Distribution ist:
Wenn Sie wollen, dass die Ausgangsberechtigungen sich von
den Standardwerten unterscheiden, können Sie
mysql_install_db vor der Ausführung
bearbeiten. Allerdings bietet es sich eher an, mit
GRANT
und REVOKE
die
Berechtigungen zu ändern, nachdem
die Grant-Tabellen eingerichtet wurden. Mit anderen
Worten, Sie können mysql_install_db
ausführen und dann mithilfe von mysql -u root
mysql
eine Verbindung zum Server als
MySQL-root
-Benutzer herstellen, damit
Sie die erforderlichen GRANT
- und
REVOKE
-Anweisungen absetzen können.
Wenn Sie MySQL auf mehreren Computern mit denselben
Berechtigungen installieren wollen, können Sie die
GRANT
- und
REVOKE
-Anweisungen auch in einer Datei
ablegen und diese Datei mithilfe von
mysql
als Skript ausführen, nachdem
Sie mysql_install_db gestartet haben.
Ein Beispiel:
shell>bin/mysql_install_db --user=mysql
shell>bin/mysql -u root < your_script_file
Auf diese Weise müssen Sie die Anweisungen nicht manuell auf jedem einzelnen Computer eingeben.
Es ist möglich, die Grant-Tabellen nach ihrer Erstellung
vollständig neu zu erstellen. Dies müssen Sie unter
Umständen tun, wenn Sie gerade erst lernen, wie man
GRANT
und REVOKE
verwendet, und nach der Ausführung von
mysql_install_db derart viele
Änderungen vorgenommen haben, dass Sie die Tabellen
komplett löschen und von vorn beginnen wollen.
Um die Grant-Tabellen neu zu erstellen, entfernen Sie alle
.frm
-, .MYI
- und
.MYD
-Dateien im Datenbankverzeichnis
mysql
. Danach führen Sie das Skript
mysql_install_db erneut aus.
Sie können mysqld manuell mithilfe der
Option --skip-grant-tables
starten und
die Berechtigungsdaten selbst unter Verwendung von
mysql hinzufügen:
shell>bin/mysqld_safe --user=mysql --skip-grant-tables &
shell>bin/mysql mysql
Von mysql führen Sie die in mysql_install_db enthaltenen SQL-Befehle manuell aus. In jedem Fall müssen Sie danach mysqladmin flush-privileges oder mysqladmin reload ausführen, um dem Server mitzuteilen, dass er die Grant-Tabellen neu laden muss.
Beachten Sie, dass Sie, wenn Sie mysql_install_db nicht benutzen, die Grant-Tabellen nicht nur manuell ausfüllen, sondern sie zuvor auch noch erstellen müssen.
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.