it-swarm.com.de

mysqldump auf Slave (ohne die Replikation zu stoppen)

Ist es in Ordnung, mysqldump --single-transaction in der Slave-Datenbank, ohne die Replikation zu stoppen (stop slave;)? Dies dient zur regelmäßigen täglichen Sicherung, damit wir die Master-Datenbank im Falle einer Speicherkatastrophe wiederherstellen können. Die meisten Tabellen sind InnoDB, nur einige sind MyISAM.

Offizielle Dokumentation besagt, dass:

"Sie sollten die Replikation auf dem Slave stoppen, bevor Sie den Dump-Prozess starten, um sicherzustellen, dass der Dump einen konsistenten Datensatz enthält.".

Was bedeutet das consistent data? Bedeutet das wie die neuesten Daten?

Ich kenne --single-transaction bedeutet, dass Daten ab dem Zeitpunkt der Ausgabe erfasst werden, sodass neue (weitere) Änderungen während des Speicherauszugs nicht im Speicherauszug aufgezeichnet werden. Hab ich recht?

Sie möchten das Backup nicht auf dem Master ausführen, da es in unserer Anwendung zu Verzögerungen kommt.

5
user

Durch Ausführen eines mysqldump wird ein konsistenter und logischer Speicherauszug der Daten erstellt, der zu einem bestimmten Zeitpunkt wiederhergestellt werden kann.

Es gibt zwei Möglichkeiten, die Replikation teilweise zu stoppen

METHODE 1: mysqldump Option --dump-Slave

Wenn Sie einen mysqldump mit - dump-Slave ausführen, wird nur der SQL-Thread gestoppt. Der E/A-Thread sammelt weiterhin binäre Protokollereignisse vom Master. Beachten Sie, wie dies in der MySQL-Dokumentation erklärt wird :

Diese Option ähnelt --master-data, außer dass sie zum Speichern eines Replikations-Slave-Servers verwendet wird, um eine Speicherauszugsdatei zu erstellen, mit der ein anderer Server als Slave eingerichtet werden kann, der denselben Master wie der Speicherauszugsserver hat. Die Dump-Ausgabe enthält eine CHANGE MASTER TO-Anweisung, die die binären Protokollkoordinaten (Dateiname und Position) des Dumps-Slave-Masters angibt. Dies sind die Master-Server-Koordinaten, von denen aus der Slave mit der Replikation beginnen soll.

--dump-Slave bewirkt, dass die Koordinaten vom Master anstelle der Koordinaten des gedumpten Servers verwendet werden, wie dies bei der Option --master-data der Fall ist. Wenn Sie diese Option angeben, wird die Option --master-data bei Verwendung überschrieben und effektiv ignoriert.

Der Optionswert wird genauso behandelt wie für --master-data (das Setzen von no value oder 1 bewirkt, dass eine CHANGE MASTER TO-Anweisung in den Dump geschrieben wird, Einstellung 2 bewirkt, dass die Anweisung geschrieben, aber in SQL-Kommentare eingeschlossen wird) und hat Der gleiche Effekt wie --master-data in Bezug auf das Aktivieren oder Deaktivieren anderer Optionen und den Umgang mit Sperren.

Diese Option bewirkt, dass mysqldump den Slave-SQL-Thread vor dem Dump stoppt und danach erneut startet.

In Verbindung mit --dump-Slave können auch die Optionen --apply-Slave-Anweisungen und --include-master-Host-Port verwendet werden.

Diese Option wurde in MySQL 5.5.3 hinzugefügt.

METHODE 2: Stoppen Sie den SQL-Thread selbst

Wussten Sie, dass Sie den SQL-Thread manuell stoppen können? Gemäß der MySQL-Dokumentation zu STOP SLAVE; können Sie Folgendes ausführen:

mysql> STOP SLAVE SQL_THREAD;

Der E/A-Thread empfängt weiterhin Binlog-Ereignisse vom Master.

Nachdem Sie STOP SLAVE SQL_THREAD; Ausgeführt haben, können Sie Ihren mysqldump ausführen. Sie könnten wahrscheinlich einen LVM-Snapshot oder etwas anderes mit den Datendateien auf dem Slave machen.

Wenn Sie mit Ihrem Backup fertig sind, führen Sie es aus

mysql> START SLAVE SQL_THREAD;

oder

mysql> START SLAVE;

Dadurch wird der SQL-Thread reaktiviert.

VERSUCHE ES !!!

Warnung : Durch das Stoppen des SQL-Threads, der eine lokale DB-Verbindung beendet, können mit CREATE TEMPORARY TABLE Erstellte Tabellen verschwinden. Wenn Sie die anweisungsbasierte Replikation verwenden, führen Sie zusätzliche Untersuchungen in Ihrer App durch, um sicherzustellen, dass Transaktionen nicht zurückgesetzt werden, wenn der SQL-Thread gestoppt wird.

WAS IST MIT - Einzeltransaktion ???

Sie können mysqldump mit - Single-Transaktion ??? ohne - Dump-Slave . Es gibt jedoch viele Befehle, die laufende Transaktionen unterbrechen. Siehe die Liste dieser Befehle in meinem alten Beitrag Transaktions-DDL-Workflow für MySQL .

UPDATE 2018-02-13 13:07 EST

Du hast mich gerade gefragt : These backups are for restoring the master DB in case of a storage disaster. Not for slave. So is --dump-slave still valid?

Wenn Sie den Speicherauszug unverändert verwenden (ohne einen weiteren Slave damit zu erstellen und ohne zu einem bestimmten Zeitpunkt eine Wiederherstellung mit Wiedergabe von Binärprotokollen zu versuchen), ist yes - dump-Slave OK.

Bitte denken Sie daran, dass wenn Sie um Mitternacht einen mysqldump starten, dies der Zeitpunkt des Dumps ist.

Hier ist ein zusätzlicher Vorteil der Verwendung von - dump-Slave : Der mysqldump enthält die Protokolldatei des Masters und die Position zwischen den Zeilen 23 und 25. Wenn Sie also einen anderen Slave erstellen möchten, haben Sie die Replikationskoordinaten des Masters. Wenn Sie eine Wiederherstellung zu einem bestimmten Zeitpunkt versuchen möchten und die Binärprotokolle dennoch vom alten Master abrufen können, können Sie dies tun.

2
RolandoMySQLDBA