mysqld_multi wurde entwickelt, um mehrere mysqld-Prozesse zu verwalten, die auf Verbindungen über verschiedene Unix-Socketdateien oder TCP/IP-Ports horchen. Das Skript kann Server starten und beenden und den aktuellen Status melden. Eine Alternative zur Verwaltung mehrerer Server ist der MySQL Instance Manager (siehe auch Abschnitt 5.5, „mysqlmanager — Der MySQL Instance Manager“).
mysqld_multi sucht nach Abschnitten
namens
[mysqld
in
N
]my.cnf
(bzw. in der Datei, die mit der
Option --config-file
angegeben wurde).
N
kann eine beliebige positive
Ganzzahl sein. Diese Zahl wird in der folgenden Abhandlung
als Abschnittsnummer bzw. als GNR
(vom Englischen „Group Number“) bezeichnet.
Abschnittsnummern trennen Abschnitte in Optionsdateien
voneinander und werden als Argumente für
mysqld_multi verwendet. Sie geben an,
welche Server Sie starten oder beenden bzw. zu welchen
Servern Sie einen Statusbericht anfordern wollen. Die
Optionen, die in diesen Abschnitten aufgelistet sind, sind
identisch mit denen, die Sie im Abschnitt
[mysqld]
angeben würden, der zum Starten
von mysqld verwendet wird. (Siehe z. B.
Abschnitt 2.9.2.2, „MySQL automatisch starten und anhalten“.) Wenn Sie allerdings
mehrere Server verwenden, ist es erforderlich, dass jeder
dieser Server seinen eigenen Optionswert (z. B. die
Unix-Socketdatei oder die TCP/IP-Portnummer) verwendet.
Weitere Informationen dazu, welche Optionen in einer
Multiserverumgebung für jeden Server eindeutig sein
müssen, finden Sie in Abschnitt 5.13, „Mehrere MySQL-Server auf derselben Maschine laufen lassen“.
Um mysqld_multi aufzurufen, verwenden Sie folgende Syntax:
shell> mysqld_multi [options
] {start|stop|report} [GNR
[,GNR
] ...]
start
, stop
und
report
geben die jeweilig
durchzuführende Operation an. Sie können die angegebene
Operation für einen oder mehrere Server abhängig davon
durchführen lassen, welche
GNR
-Liste auf die Option folgt.
Ist keine Liste vorhanden, dann führt
mysqld_multi den Vorgang für alle Server
in der Optionsdatei aus.
Jeder GNR
-Wert stellt eine
Abschnittsnummer bzw. einen Abschnittsnummernbereich für
Optionsdateien dar. Der Wert sollte die Zahl am Ende des
Abschnittsnamens in der Optionsdatei sein. So lautet die
GNR
für einen Abschnitt namens
[mysqld17]
etwa 17
. Um
einen Zahlenbereich anzugeben, trennen Sie die erste und die
letzte Zahl durch einen Bindestrich. Der
GNR
-Wert 10-13
bezeichnet also die Abschnitte [mysqld10]
bis [mysqld13]
. Mehrere Abschnitte oder
Abschnittsbereiche lassen sich – getrennt durch Kommata
– auf der Befehlszeile angeben. Es dürfen keine
Whitespace-Zeichen (d. h. Leerzeichen oder Tabulatoren) in
der GNR
-Liste erscheinen, da alle
auf ein solches Zeichen folgenden Angaben ignoriert werden.
Der folgende Befehl startet einen einzelnen Server unter
Verwendung des Optionsabschnitts
[mysqld17]
:
shell> mysqld_multi start 17
Der folgende Befehl beendet mehrere Server unter Verwendung
der Abschnittsgruppen [mysqld8]
sowie
[mysqld10]
bis
[mysqld13]
:
shell> mysqld_multi stop 8,10-13
Ein Beispiel, wie man eine Optionsdatei konfigurieren kann, bietet der folgende Befehl:
shell> mysqld_multi --example
mysqld_multi unterstützt die folgenden Optionen:
Zeigt eine Hilfsmeldung an und wird dann beendet.
Gibt den Namen einer alternativen Optionsdatei an. Die
Option bestimmt, wo mysqld_multi nach
[mysqld
-Optionsabschnitten
sucht. Ohne Angabe dieser Option werden alle Optionen
aus der normalen Optionsdatei
N
]my.cnf
ausgelesen. Die Option
beeinflusst nicht, wo mysqld_multi
seine eigenen Optionen ausliest (diese werden immer dem
Abschnitt [mysqld_multi]
in der
normalen Datei my.cnf
entnommen).
Zeigt eine Beispieloptionsdatei an.
Gibt den Namen der Logdatei an. Wenn die Datei vorhanden ist, werden geloggte Einträge angehängt.
Gibt die mysqladmin-Binärdatei an, die zum Beenden von Servern verwendet wird.
Die zu verwendende
mysqld-Binärdatei. Beachten Sie,
dass Sie auch mysqld_safe als Wert
angeben können. Wenn Sie den Server mit
mysqld_safe starten, können Sie die
Optionen mysqld
oder
ledir
im entsprechenden Abschnitt
[mysqld
angeben. Diese Optionen bezeichnen den Namen des
Servers, den mysqld_safe starten
soll, und den Pfadnamen des Verzeichnisses, in dem der
Server sich befindet. (Beschreibungen zu diesen Optionen
finden Sie in Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“.) Beispiel:
N
]
[mysqld38] mysqld = mysqld-max ledir = /opt/local/mysql/libexec
Schreibt Loginformationen in stdout
statt in die Logdatei. (Standardmäßig erfolgt die
Ausgabe in die Logdatei.)
Passwort des MySQL-Kontos, das für den Aufruf von mysqladmin verwendet wird. Beachten Sie, dass der Passwortwert – anders als bei anderen MySQL-Programmen – bei dieser Option nicht optional ist.
Stummer Modus (Warnungen werden deaktiviert).
Alle betreffenden MySQL-Server werden statt über die
Unix-Socketdatei über den TCP/IP-Port angebunden. (Wenn
eine Socketdatei fehlt, kann der Server zwar unter
Umständen noch laufen, ist aber nur über den
TCP/IP-Port erreichbar.) Standardmäßig werden
Verbindungen unter Verwendung der Unix-Socketdatei
hergestellt. Diese Option wirkt sich auf alle
stop
- und
report
Operationen aus.
Benutzername des MySQL-Kontos, das für den Aufruf von mysqladmin verwendet wird.
Zeigt mehr Informationen an.
Zeigt die Versionsinformation an und wird dann beendet.
Einige Anmerkungen zu mysqld_multi:
Extrem wichtig: Bevor Sie mysqld_multi verwenden, müssen Sie die Bedeutung der Optionen, die an die mysqld-Server übergeben werden, verstanden haben und genau wissen, warum Sie separate mysqld-Prozesse benutzen wollen. Die Verwendung mehrerer mysqld-Server mit demselben Datenverzeichnis ist extrem gefährlich. Sofern Sie nicht genauestens wissen, was Sie tun, verwenden Sie in jedem Fall getrennte Datenverzeichnisse. Das Starten mehrerer Server mit demselben Datenverzeichnis steigert die Leistungsfähigkeit eines Thread-basierten Systems nicht! Siehe auch Abschnitt 5.13, „Mehrere MySQL-Server auf derselben Maschine laufen lassen“.
Wichtig: Vergewissern
Sie sich, dass das Datenverzeichnis jedes Servers für
das Unix-Konto, unter dem der jeweilige
mysqld-Prozess gestartet wurde,
uneingeschränkt zugänglich ist. Verwenden Sie hierfür
keinesfalls das Unix-Konto
root
, sofern Sie nicht
genauestens wissen, was Sie tun.
Siehe auch Abschnitt 5.7.5, „Wie man MySQL als normaler Benutzer laufen läßt“.
Vergewissern Sie sich, dass das MySQL-Konto, welches zum
Beenden der mysqld-Server (mit dem
Programm mysqladmin) verwendet wird,
für jeden Server den gleichen Benutzernamen und das
gleiche Passwort hat. Außerdem müssen Sie
sicherstellen, dass das Konto über die Berechtigung
SHUTDOWN
verfügt. Wenn die Server,
die Sie verwalten wollen, unterschiedliche Benutzernamen
oder Passwörter für die Administrationskonten
aufweisen, sollten Sie auf jedem Server ein Konto mit
jeweils demselben Benutzernamen und Passwort einrichten.
Sie könnten etwa ein gemeinsames Konto
multi_admin
erstellen, indem Sie auf
jedem Server die folgenden Befehle ausführen:
shell>mysql -u root -S /tmp/mysql.sock -p
Enter password: mysql>GRANT SHUTDOWN ON *.*
->TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
Siehe auch Abschnitt 5.8.2, „Wie das Berechtigungssystem funktioniert“. Sie müssen
diesen Schritt für jeden
mysqld-Server durchführen. Ändern
Sie die Verbindungsparameter entsprechend, wenn Sie mit
den einzelnen Servern Verbindungen herstellen. Beachten
Sie, dass der Hostnamensteil des Kontonamens die
Herstellung einer Verbindung als
multi_admin
von dem Host aus
ermöglichen muss, auf dem sie
mysqld_multi ausführen wollen.
Die Unix-Socketdatei und die TCP/IP-Portnummer müssen für jeden mysqld-Server unterschiedlich sein.
Die Option --pid-file
ist sehr wichtig,
wenn Sie mysqld_safe zum Starten von
mysqld verwenden (z. B.
--mysqld=mysqld_safe
). Jeder
mysqld-Server sollte seine eigene
Prozesskennungsdatei haben. Der Vorteil der Verwendung
von mysqld_safe anstelle von
mysqld besteht darin, dass
mysqld_safe seinen
mysqld-Prozess überwacht und ihn neu
startet, wenn der Prozess aufgrund eines Signals,
welches mit kill -9
gesendet wurde,
oder aus einem anderen Grund (z. B. wegen eines
Segmentierungsfehlers) terminiert wurde. Bitte beachten
Sie, dass das Skript mysqld_safe
unter Umständen erfordert, dass Sie es von einer
bestimmten Position aus starten. Das bedeutet, dass Sie
möglicherweise in ein bestimmtes Verzeichnis wechseln
müssen, bevor Sie mysqld_multi
ausführen. Wenn Sie Probleme mit dem Starten haben,
rufen Sie das Skript mysqld_safe zur
Anzeige auf. Suchen Sie dort die folgenden Zeilen:
---------------------------------------------------------------- MY_PWD=`pwd` # Check if we are starting this relative (for the binary release) if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \ -x ./bin/mysqld ----------------------------------------------------------------
Der mit diesen Zeilen durchgeführte Test sollte erfolgreich sein, andernfalls könnten Probleme auftreten. Siehe auch Abschnitt 5.4.1, „mysqld_safe — Startskript für den MySQL-Server“.
Sie sollten die Option --user
für
mysqld verwenden. Zu diesem Zweck
müssen Sie das Skript mysqld_multi
jedoch als Unix-Benutzer root
ausführen. Das Einfügen der Option in die Optionsdatei
ist irrelevant: Wenn Sie nicht der Superuser sind und
die mysqld-Prozesse unter Ihrem
eigenen Unix-Konto gestartet werden, erhalten Sie
lediglich eine Warnung.
Das folgende Beispiel zeigt, wie Sie eine Optionsdatei zur
Verwendung mit mysqld_multi einrichten
könnten. Die Reihenfolge, in der die
mysqld-Programme gestartet oder beendet
werden, hängt von der Reihenfolge ab, in der sie in der
Optionsdatei aufgeführt sind. Abschnittsnummern müssen
keine durchgehende Folge bilden. Der erste und der fünfte
[mysqld
-Abschnitt
wurden im Beispiel absichtlich weggelassen, um zu
veranschaulichen, dass es „Lücken“ in der
Optionsdatei geben darf. Dies erhöht die Flexibilität.
N
]
# This file should probably be in your home dir (~/.my.cnf) # or /etc/my.cnf # Version 2.1 by Jani Tolonen [mysqld_multi] mysqld = /usr/local/bin/mysqld_safe mysqladmin = /usr/local/bin/mysqladmin user = multi_admin password = multipass [mysqld2] socket = /tmp/mysql.sock2 port = 3307 pid-file = /usr/local/mysql/var2/hostname.pid2 datadir = /usr/local/mysql/var2 language = /usr/local/share/mysql/english user = john [mysqld3] socket = /tmp/mysql.sock3 port = 3308 pid-file = /usr/local/mysql/var3/hostname.pid3 datadir = /usr/local/mysql/var3 language = /usr/local/share/mysql/swedish user = monty [mysqld4] socket = /tmp/mysql.sock4 port = 3309 pid-file = /usr/local/mysql/var4/hostname.pid4 datadir = /usr/local/mysql/var4 language = /usr/local/share/mysql/estonia user = tonu [mysqld6] socket = /tmp/mysql.sock6 port = 3311 pid-file = /usr/local/mysql/var6/hostname.pid6 datadir = /usr/local/mysql/var6 language = /usr/local/share/mysql/japanese user = jani
Siehe auch Abschnitt 4.3.2, „my.cnf-Optionsdateien“.
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.