In MySQL funktioniert die Replikation mit
InnoDB
-Tabellen wie mit
MyISAM
-Tabellen. Es sind auch
Replikationsumgebungen möglich, bei denen der Slave eine andere
Speicher-Engine als der Master verwendet. So können Sie
beispielsweise Änderungen, die auf dem Master an einer
InnoDB
-Tabelle vorgenommen werden, in einer
MyISAM
-Tabelle auf dem Slave replizieren.
Um einen neuen Slave für den Master einzurichten, müssen Sie
den InnoDB
-Tablespace und die Logdateien
sowie die .frm
-Dateien der
InnoDB
-Tabellen kopieren und diese Kopien auf
den Slave übertragen. Wenn die Variable
innodb_file_per_table
eingeschaltet ist,
müssen auch die .ibd
-Dateien kopiert
werden. Wie dies genau geht, erfahren Sie unter
Abschnitt 14.2.8, „Sichern und Wiederherstellen einer InnoDB
-Datenbank“.
Wenn Sie den Master oder einen vorhandenen Slave herunterfahren,
können Sie ein kaltes Backup des
InnoDB
-Tablespace und der Logdateien
erstellen und damit einen Slave einrichten. Um einen neuen Slave
aufzusetzen, ohne gleich den Server herunterzufahren, können
Sie das kommerzielle (also kostenpflichtige) Tool
InnoDB
Hot Backup
verwenden.
Die InnoDB
-Replikation wird mit der
LOAD TABLE FROM MASTER
-Anweisung
eingerichtet, die allerdings nur mit
MyISAM
-Tabellen funktioniert. Dafür gibt es
jedoch zwei Workarounds:
Sie können einen Tabellen-Dump auf dem Master vornehmen und die Dump-Datei in den Slave importieren.
Sie können auf dem Master ALTER TABLE
einstellen, bevor Sie die Replikation mit tbl_name
ENGINE=MyISAMLOAD
TABLE
starten, und danach die Master-Tabelle mit
tbl_name
FROM
MASTERALTER TABLE
wieder in
InnoDB
konvertieren. Tun Sie das aber
nicht mit Tabellen, die Fremdschlüsseldefinitionen haben,
da diese Definitionen sonst verlorengehen.
Transaktionen, die auf dem Master scheitern, haben auf die
Replikation keinerlei Auswirkungen. Die Replikation beruht in
MySQL auf dem Binärlog, wo die SQL-Anweisungen, die Daten
modifizieren, festgehalten werden. Eine Transaktion, die
scheitert (beispielsweise wegen Verstoß gegen einen
Fremdschlüssel-Constraint oder weil sie zurückgerollt wird),
gelangt gar nicht ins Binärlog und ergo auch nicht auf die
Slaves. Siehe Abschnitt 13.4.1, „BEGIN/COMMIT/ROLLBACK
“.
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.