In manchen Fällen kann es wünschenswert oder erforderlich sein, mehrere mysqld-Server auf demselben Computer auszuführen. Dies ist etwa der Fall, wenn Sie einen neuen MySQL-Release testen wollen, ohne die vorhandene Produktionskonfiguration anzurühren, oder wenn Sie verschiedenen Benutzern Zugang zu unterschiedlichen mysqld-Servern gestatten wollen, die dann von diesen Benutzern selbst verwaltet werden. (Ein solcher Fall läge bei einem Internetprovider vor, der separate MySQL-Installationen für verschiedene Kunden bereithält.)
Damit mehrere Server auf demselben Computer ausgeführt werden können, benötigt jeder Server eindeutige Werte für verschiedene Betriebsparameter. Diese können über die Befehlszeile oder in Optionsdateien angegeben werden. Siehe auch Abschnitt 4.3, „Angabe von Programmoptionen“.
Zumindest die folgenden Optionen müssen für jeden Server unterschiedlich sein:
--port=
port_num
--port steuert die Portnummer für TCP/IP-Verbindungen.
--socket=
path
--socket gibt unter Unix den Pfad zur Unix-Socketdatei und unter Windows den Namen der Named Pipe an. Unter Windows müssen separate Pipe-Namen nur für diejenigen Server angegeben werden, die Named-Pipe-Verbindungen unterstützen.
--shared-memory-base-name=
name
Diese Option wird derzeit nur unter Windows verwendet. Sie bezeichnet den Namen des gemeinsamen Speichers, mit dem ein Windows-Server Clients das Herstellen einer Verbindung über gemeinsamen Speicher gestattet. Die Angabe ist nur für Server erforderlich, die Verbindungen über gemeinsamen Speicher unterstützen.
--pid-file=
file_name
Diese Option wird nur unter Unix verwendet. Sie gibt den Pfadnamen der Datei an, in die der Server seine Prozesskennung schreibt.
Wenn Sie die folgenden Logdateioptionen verwenden, müssen diese für jeden Server anders sein:
--log=
file_name
--log-bin=
file_name
--log-update=
file_name
--log-error=
file_name
--bdb-logdir=
file_name
Weitere Informationen zu Logdateien finden Sie in Abschnitt 5.12.5, „Wartung und Pflege der Logdateien“.
Zur Leistungsoptimierung können Sie auch die folgenden Optionen für jeden Server individuell angeben, um so die Last auf mehrere physische Festplatten zu verteilen:
--tmpdir=
path
--bdb-tmpdir=
path
Auch die Verwendung verschiedener Temporärverzeichnisse wird empfohlen, um besser bestimmen zu können, welche MySQL-Server welche der vorhandenen Temporärdateien erstellt hat.
Mit sehr wenigen Ausnahmen sollte jeder Server ein eigenes Datenverzeichnis haben, das mit der Option --datadir= angegeben wird.
path
Warnung: Normalerweise sollten Daten in denselben Datenbanken niemals von zwei Servern aktualisiert werden. Dies kann zu unliebsamen Überraschungen führen, wenn Ihr Betriebssystem keine fehlerfreie Systemsperrung unterstützt. Wenn Sie (ungeachtet dieser Warnung) mehrere Server betreiben, die dasselbe Datenverzeichnis verwenden, müssen Sie, wenn das Loggen aktiviert ist, die passenden Optionen zur Angabe der Logdateinamen festlegen, die für jeden Server eindeutig sein müssen. Andernfalls versuchen die Server nämlich, in die gleichen Logdateien zu schreiben. Beachten Sie, dass eine solche Konfiguration nur bei MyISAM- und MERGE-Tabellen funktioniert, nicht aber bei anderen Speicher-Engines.
Die Warnung vor der gemeinsamen Nutzung eines Datenverzeichnisses durch mehrere Server gilt auch in einer NFS-Umgebung. Mehreren MySQL-Servern den Zugriff auf ein gemeinsames Datenverzeichnis über NFS zu gestatten, ist eine ganz schlechte Idee.
Das Problem ist hierbei primär, dass NFS in punkto Geschwindigkeit einen Flaschenhals darstellt. NFS ist für einen solchen Einsatz schlichtweg ungeeignet.
Ein weiteres Risiko besteht bei NFS darin, dass Sie eine Möglichkeit finden müssen, sicherzustellen, dass zwei oder mehr Server einander nicht stören. Normalerweise wird die NFS-Dateisperrung vom Daemon lockd verwaltet; es gibt aber derzeit keine Plattform, die die Sperrung in jeder Situation hundertprozentig zuverlässig ausführt.
Machen Sie es sich einfach: Lassen Sie die Freigabe eines Datenverzeichnisses für mehrere Server über NFS einfach bleiben. Eine bessere Lösung besteht in der Verwendung eines Computers, der mehrere Prozessoren enthält und ein Betriebssystem verwendet, das Threads effizient verwaltet.
Wenn Sie mehrere MySQL-Installationen in verschiedenen Verzeichnissen haben, können Sie das Basisinstallationsverzeichnis für jeden Server mit der Option --basedir= angeben; in diesem Fall verwendet jeder Server ein anderes Datenverzeichnis, eigene Logdateien und eine eigene Prozesskennungsdatei. (Standardmäßig werden diese Werte relativ zum Basisverzeichnis gesetzt.) In diesem Fall müssen Sie als weitere Optionen nur path--socket und --port angeben. Angenommen, Sie installieren verschiedene MySQL-Versionen aus einer tar-Datei mit einer Binärdistribution. Diese Versionen werden an verschiedenen Positionen installiert, d. h. Sie können den Server für jede Installation mit dem Befehl bin/mysqld_safe in seinem jeweiligen Basisverzeichnis starten. mysqld_safe bestimmt die korrekte --basedir-Option, die an mysqld übergeben werden muss; Sie müssen dann nur noch die Optionen --socket und --port für mysqld_safe angeben.
Wie in den vorangegangenen Abschnitten bereits erläutert, können zusätzliche Server durch Einstellen von Umgebungsvariablen oder durch Angabe passender Befehlszeilenoptionen gestartet werden. Wenn Sie allerdings auf Dauer mehrere Server ausführen wollen, ist es praktischer, die Optionswerte, die für jeden Server eindeutig sein müssen, mithilfe von Optionsdateien anzugeben. Die Option --defaults-file ist für diese Zwecke praktisch.
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.
