So richten Sie die MySQL-Replikation mit minimalen Ausfallzeiten ein

11

Grundsätzlich haben wir eine große MySQL-Datenbank und möchten eine Replikation auf einen Slave durchführen (Master-Slave-Setup). Habt ihr eine Schritt-für-Schritt-Anleitung, wie man dies mit minimalen Ausfallzeiten in der Datenbank macht? Das Sichern der Datenbank und das Übertragen des Backups auf den Slave-Server (auch über ein privates Netzwerk) dauert ungefähr 40 Minuten. Ziemlich lange Ausfallzeiten.

Patrick
quelle

Antworten:

14

Ich gehe davon aus, dass Sie InnoDB als Speicher-Engine verwenden. In diesem Fall müssen Sie die Bin-Protokollierung aktivieren . Wenn es jetzt nicht aktiviert ist, müssen Sie MySQL neu starten, nachdem Sie my.cnf geändert haben. Dies ist die einzige Ausfallzeit, nach der Sie die Datenbank mit der Position binlog sichern können, ohne die Datenbank zu blockieren:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Stellen Sie basierend auf dieser Sicherung die Daten auf dem Slave wieder her. Danach können Sie jedem MySQL-Replikations-Tutorial folgen und den Slave zusammen mit dem Master einholen / ausführen lassen.

pQd
quelle
Was würde passieren, wenn einige Tabellen nicht innodb verwenden? Und wäre die obige Sicherung noch gültig, wenn ich --databases verwende, um eine Teilmenge der Datenbanken anstelle von -A zu sichern?
Mathieu
Wenn einige Tabellen innodb nicht verwenden, ist die Sicherung möglicherweise inkonsistent. siehe hier: stackoverflow.com/a/7461466/104398 ; Backup enthält diese übersprungenen Datenbanken nicht. Wenn Sie die Replikation basierend auf einer solchen Sicherung einrichten und nicht filtern, was repliziert wird, wird Ihre Replikation unterbrochen, sobald eine Operation für ausgelassene Datenbanken ausgeführt wird.
pQd
Ok, ich habe meine verbleibenden Myisam-Tabellen in innodb konvertiert und sichergestellt, dass nur die gewünschten Datenbanken repliziert / gesichert werden.
Mathieu
3

Um eine Replikation zu starten, benötigen Sie eine konsistente Kopie Ihrer Datenbank auf dem Slave

Sind Ihre Tische mit Myisam oder Innodb gesichert? Problem herauszufinden

show table status

und schauen Sie sich die Spalte 'Engine' an

Wenn alle Tabellen innodb sind, können Sie mit mysqldump --single-transaction keine Ausfallzeiten einrichten und diese in den Slave importieren

Wenn es sich bei den Tabellen um Myisam handelt, muss es zu Ausfallzeiten kommen, da Sie die Tabellen zum Schreiben sperren müssen, während sie kopiert werden. mysqlhotcopy ist das Tool, das Ihnen dabei hilft.

Wenn Sie LVM (Logical Volume Manager) verwenden, können Sie alternativ die Datenbank stoppen, in wenigen Sekunden einen LVM-Snapshot erstellen und die Datenbank erneut starten. Anschließend können Sie aus dem Snapshot eine konsistente Kopie erstellen.

Aleksandar Ivanisevic
quelle
1

Um den Slave einzurichten, müssen Sie einen Datenschnappschuss erstellen und die Position des binären Protokolls aufzeichnen. Das Sichern der Datenbank sollte keine Ausfallzeiten verursachen, obwohl dies zu einer verminderten Leistung führt. Sie sichern die Datenbank jedoch trotzdem bereits, oder? Möglicherweise muss das Backup einige Tabellen sperren, und dies kann zu Sperrungen in Ihrer Anwendung führen. Sie müssen sich unbedingt ansehen, wie es dafür implementiert ist.

Können Sie einen Schnappschuss der Festplatte machen? Dies würde die Ausfallzeit erheblich reduzieren, wenn Sie ein Hotback durchführen können.

hellomynameisjoel
quelle