Suchen Sie nach einer Strategie oder einem Tool für die Wiederherstellung einer einzelnen Datenbank zu einem bestimmten Zeitpunkt in einem ausgelasteten replizierten System.
Ich habe 12 Datenbanken, die auf 2 MySQL 5.0.77-Servern in einer vom Master-Slave replizierten Konfiguration ausgeführt werden. Täglich wird ein vollständiger Speicherauszug des schreibgeschützten Slaves erstellt, und es sind inkrementelle SQL-Speicherauszüge verfügbar, wobei diese Sicherungen außerhalb des Standorts erfolgen und der Replikationsstatus überwacht wird.
Bearbeiten: Tabellen sind eine Mischung aus InnoDB und myISAM, daher sind keine motorspezifischen Lösungen verfügbar.
Bei einem vollständigen Ausfall des Master-Servers kann ich die Replikation unterbrechen und den Slave-Server hochstufen. Außerdem habe ich die Möglichkeit, einen neuen Server neu zu erstellen und aus der Offside-FULL-Sicherung heraus zu konfigurieren und dann die vom Slave stündlich entnommenen Differentiale anzuwenden.
Ich bin jedoch besorgt darüber, wie ich mit einem teilweisen Ausfall oder dem Ausfall einer einzelnen Datenbank umgehen soll. Ich kann mir zwei Szenarien vorstellen, die sehr wahrscheinlich sind.
- Datenbank 7 (zum Beispiel) wird beschädigt, bedient weiterhin einige Anforderungen, bis jemand bemerkt, dass sie beschädigt ist, oder Warnungen aus den Protokolldateien ...
- Einige Abfragen wie Drop-Datenbank, Drop-Tabelle, Abfrage vom Typ "Update where ..." borks eine einzelne Datenbank oder eine Teilmenge darin.
Im Moment habe ich eine Reihe von FULL-Dumps als FULL- $ DATE-all-database.sql.gz-Dateien und Differentiale, die auf die FULL-Dumps als DIFF- $ DATE-all-database.sql.gz angewendet werden können
Um die Datenbank 7 zu einem bestimmten Zeitpunkt wiederherzustellen, wäre ein Durchsuchen der FULL- und DIFF-Dateien sowie eine manuelle Anwendung dieser SQL erforderlich.
Wie soll ich vorgehen, um die Wiederherstellung eines der vorherigen DIFF-Dumps in der Master-Datenbank zu ermöglichen?
MUSS ich in einzelne Datenbankdateien sichern, dh
mysqldump --databases "database1" | gzip > database1.sql.gz
mysqldump --databases "database2" | gzip > database2.sql.gz
mysqldump --databases "database3" | gzip > database3.sql.gz
eher, als..
mysqldump --master-data --lock--all-databases --all-databases | gzip > all-databases.sql.gz
Was passiert mit dem Stammdaten-Binärprotokoll, wenn ich separate mysqldump-Dateien verwende, und sollte ich überhaupt --master-data für die Master-Server-Wiederherstellungsspeicherauszüge festlegen?