MySQL Backup- und Recovery-Strategien

Werbung
MySQL Backup- und Recovery-Strategien
Matthias Jung
ORDIX AG
Wiesbaden
Schlüsselworte:
MySQL, Backup, Recovery, Restore, Snapshot
Einleitung
In den letzten Wochen und Monaten hat das freie Datenbankprodukt MySQL zunehmend an
Bedeutung gewonnen. Immer mehr Kunden entscheiden sich dafür, MySQL als Alternative zu
den im professionellen Bereich etablierten Datenbankprodukten einzusetzen.
Ein ausgereiftes Sicherungs- und Wiederherstellungskonzept ist in diesem Umfeld von
existentieller Bedeutung. Der folgende Vortrag soll einen grundlegenden Überblick über die
Möglichkeiten der Sicherung und Wiederherstellung von MySQL Datenbanken geben.
Einführung
Die Erstellung eines Sicherungskonzeptes wirft im Vorfeld viele Fragen auf.
Reicht es aus, die Datenbank offline zu sichern oder benötige ich ein Verfahren zur OnlineSicherung? Welcher Art sollen meine Backups sein? Benötige ich logische Abzüge (Dumps)
oder ist es vorteilhaft, physikalische Sicherungen (datei- und / oder blockbasiert) zu erstellen?
Kann ich neben Vollsicherungen auch inkrementelle oder gar transaktionsorientierte
Sicherungen erstellen? Welche Werkzeuge bietet mir MySQL für mein Vorhaben an? Kann
ich meine vorhandene Infrastruktur (Betriebssystem, Storage, …) gewinnbringend in mein
Konzept einbringen? Auf welche Besonderheiten muss ich seitens MySQL achten (Storage
Engine)?
Abb. 1: Offene Fragestellungen zum Thema MySQL & Backups.
MySQL unterscheidet sich in einem Punkt eklatant von den meisten anderen
Datenbankprodukten: Durch die Vielzahl der vorhandenen Storage Engines
(Speichersubsysteme). Diese, auch Tabellen-Typen genannten, Plugins kümmern sich um die
physikalische Verwaltung der eigentlichen Daten und sind mit bestimmen Funktionen
verknüpft. So gibt es Engines, die beispielsweise Daten nur im Speicher halten. Andere
Engines unterstützen keine Transaktionen und / oder referentielle Integrität.
Die Wahl einer Engine kann demnach auch Einfluss auf das gewählte Backup-Verfahren
haben. So eignen sich zum Beispiel manche Werkzeuge nicht für die Sicherung der einen oder
anderen Storage Engine.
Abb. 2: Die Verwaltung der Daten obliegt den gewählten Storage Engines.
Mögliche Backup-Strategien
Die Anforderungen an ein Backup-Konzept sind von Fall zu Fall höchst unterschiedlich.
Während die eine Firma höchsten Wert auf eine einfache Handhabung (Usabillity) legt, um
auch in Extremsituationen möglichst keine Fehler zu begehen, benötigt die andere Firma ein
Konzept, welches möglichst keinen Einfluss auf den laufenden Betrieb der Datenbank hat.
Generell sollte man sich jedoch folgende Fragen stellen:
„Wie oft möchte ich Backups erstellen und welche Wiederaufsatzpunkte ermöglichen mir
meine Sicherungen (RPO; Recovery Point Objektiv)? Kann ich nur den Moment der
Sicherung wieder herstellen oder ermöglicht mir mein Sicherungskonzept ein Point-in-timeRecovery?“
Zusätzlich muss geklärt werden, wie lange die Laufzeiten von Sicherungen – und viel
wichtiger – die Laufzeiten von Restore- und Recovery-Prozessen dauern dürfen (RTO,
Recovery Time Objective). Daneben sind natürlich auch Fragen bzgl. der Handhabung, der
Kosten und eines möglicherweise gegebenen Performance-Einflusses auf den Betrieb der
Datenbank zu klären.
Abb. 3: Mögliche Entscheidungskriterien für eine Backup-Strategie.
Aufgrund der Tatsache, dass die verschiedenen Storage Engines nicht nach einem
einheitlichen Algorithmus arbeiten, gestaltet sich die Sicherstellung eines konsistenten
Abbildes einer oder mehrerer MySQL-Datenbanken eines Servers leider schwierig.
In letzter Konsequenz kann diese Aufgabe nicht den Storage Engines überlassen werden, da
der Datenbestand einer Datenbank über alle Tabellen – egal in welcher Engine sie sich zum
Zeitpunkt des Backups befinden – logisch richtig und zeitlich einheitlich gesichert werden
muss.
Daher sperren alle Backup-Tools (die Storage Engine übergreifend arbeiten) den Zugriff von
DML und DDL Statements während der Backup-Phase. Wahlweise und je nach Anforderung
können diese Sperren auf einzelne Tabellen, die gesamte Datenbank und auf Wunsch über den
gesamten Server gelegt werden. Dies stellt natürlich eine erhebliche Einschränkung der
Verfügbarkeit (Nutzbarkeit) des Servers da.
Einige wenige Storage Engine spezifische Tools bieten allerdings auch Oracle RMAN
ähnliche Sicherungsmöglichkeiten (z. B. InnoDB Hot Backup) an. Ziel sollte es natürlich sein,
die Sperrprozesse zeitlich extrem zu minimieren oder im Idealfall ganz zu vermeiden.
Abb. 4: Konsistente Backups haben fast immer einen negativen Einfluss auf die Verfügbarkeit des
Servers bzw. der Datenbank.
Exakt der Zwang der Standardisierung, der bei der Erstellung von Backups negative
Auswirkungen (Sperren) nach sich zieht, hilft bei der Zielerreichung eines Point-in-timeRecovery. Da nicht davon auszugehen ist, dass alle Engines Transaktionsprotokolle
mitschreiben (und in der Tat tun dies die wenigsten Engines), haben sich die MySQL
Entwickler dazu entschieden, ein generisches Transaktionsprotokoll einzuführen: das Binary
Log. In diesem binären Logfile werden alle relevanten Aktionen (DML, DDL, DCL und TCL
Statements) sequentiell protokolliert.
Abb. 5: Voraussetzung für ein Point-in-time-Recovery ist die Nutzung des MySQL Binary Logs.
Eigentlich stammt dieses Logfile aus dem MySQL-Replikationsumfeld, kann aber im Rahmen
eines Backup-Konzeptes zum Recovern der erstellten Vollsicherungen (egal, ob diese logisch
oder physikalisch, online oder offline erstellt wurden) verwendet werden. Es muss lediglich
die Log-Position des Sicherungszeitpunktes (Sperrmoment) bekannt sein. Mit entsprechenden
Bordmitteln können die binären Logfiles nach einzelnen Datenbanken und/oder Tabellen
durchsucht und die Transaktion in ASCII SQL-Statements zurückgerechnet werden.
Backup-Werkzeuge und Tools
Es gibt eine Vielzahl vom Backup-Werkzeugen, GUIs, Frameworks und Skripten, die Ihnen
helfen können, Ihre Datenbanken zu sichern. In letzter Konsequenz nutzen Sie aber die
gleichen Verfahren wie die MySQL Standardwerkzeuge mysqldump und mysqlhotcopy.
mysqldump erstellt logische Backups. Im Prinzip werden DDL- und DML-Statements
generiert, mit deren Hilfe Sie in der Lage sind, exakt den Datenbestand wieder aufzubauen,
der im Moment der Sicherung aktiv in der Datenbank bestand.
Das Backup Medium entspricht damit einer – in Abhängigkeit zur Datenbank – relativ großen
ASCII-Datei. Die Erstellung einer solchen Datei kann dementsprechend lange dauern und viel
Platz einnehmen.
Auch das Wiederaufsetzen der Datenbank kann zeitintensiv sein, da alle Transaktionen,
welche zum Datenbestand geführt haben, wiederholt werden müssen.
Das Werkzeug mysqlhotcopy sichert die Datenbank physikalisch per CopyBetriebssystemkommandos. Auch hier wird die Datenbank/der Server gesperrt und alle Daten
aus den entsprechenden Hauptspeicherbereichen der Storage Engines werden auf Platte
geschrieben (Flush Tables). Sobald keine weiteren Transaktionen mehr durchgeführt werden
können (Sperre), werden die entsprechenden Datendateien kopiert. Allerdings gibt es
Restriktionen bzgl. der unterstützten Tabellen-Typen: MyISAM & Archive.
Selbstverständlich kann ein ähnliches Verfahren – durch eigene Skripte – analog auch für
andere Engines verwendet werden. Im Vorfeld sollte nur zweifelsfrei geklärt werden, welche
physikalischen Strukturen die entsprechende Engine verwendet. Darüber hinaus sollten die
Engines natürlich Sperrkonzepte (Locks) implementiert haben.
Abb. 6: MySQL liefert zwei Werkzeuge zur Erstellung von Backups mit aus: mysqldump und
mysqlhotcopy.
Abb. 7: Zwei Wege, ein Ziel: Die Sicherung der Datenbanken kann logisch oder physikalisch realisiert
werden.
Beide Verfahren scheinen für einen Oracle Administrator zunächst ungewohnt, führen aber
zum Ziel. Beide Vollsicherungen können durch entsprechend ausgewertete Binary Logs
angereichert werden. Damit lässt sich eine Datenbank mit Hilfe der Vollsicherungen auf einen
beliebigen Zeitpunkt nach vorne „recovern“.
Die Anzahl der Kommandos und Werkzeuge ist übersichtlich und leicht zu erlernen. Lediglich
hinsichtlich der Verfügbarkeit während des Backups und der Dauer des Restores – eine
entsprechende Datenmenge vorausgesetzt – lassen sich Kritikpunkte anbringen.
Hinsichtlich der Beschleunigung der Wiederherstellung eines Systems entscheiden sich die
meisten Betreiber (gerade von größeren Datenbanken) für physikalische Backups
(mysqlhotcopy oder Copy-Kommandos). Das Wiederholen der entsprechenden
Transaktionen zur erneuten Generierung eines aktuellen Datenbestandes dauert in vielen
Fällen zu lange (SLAs).
Praxislösungen
Um die verbleibenden Probleme zu minimieren gibt es in der Praxis zwei mögliche Verfahren:
•
•
Minimierung der Sperrzeit durch optimale „Kopiervorgänge“ und / oder
Verlagerung der Backup-Last auf ein nicht-produktives System.
Relativ häufig sind in der Praxis sogenannte Slave/Backup-Systeme zu finden. Bei einem
Slave handelt es sich um eine Art Schattendatenbank, welche zeitnah exakt dieselben
Transaktionen wie das produktive System (Master) erhält (am ehesten vergleichbar mit dem
Oracle Konstrukt „Logical Dataguard“).
Abb.8: MySQL unterstützt schon seit langer Zeit Replikationen.
Das MySQL-Replikationsverfahren basiert auf der Grundlage des Binary Logs, welches
bereits im Rahmen der möglichen Backup-Verfahren vorgestellt wurde. Das Master-System
loggt alle relevanten Transaktionen in diesem binären Protokoll. Das Slave- oder BackupSystem liest sequentiell diese Daten, kopiert sie lokal und spielt den SQL-Strom
(Transaktionen) in den eigenen Server ein (SQL Apply).
Auf beiden Seiten (Master und Slave) können umfangreiche Einstellungen vorgenommen
werden, um z. B. festzulegen, welche Datenbanken auf dem Master protokolliert und welche
Inhalte auf dem Slave repliziert werden sollen (es existiert eine Vielzahl an Filterkriterien).
Darüber hinaus lassen sich ohne Probleme unterschiedliche Replikationstopologien, wie z. B.
Ketten, Ringe, bidirektionale Replikationen, realisieren.
Abb.9: MySQL Replikationen werden oft im Rahmen von Backup-Konzepten eingesetzt.
Die beiden an der Replikation beteiligten Prozesse (I/O Thread und SQL Thread) lassen sich
auf Seiten des Slaves getrennt steuern. Ein Stoppen des SQL Threads sorgt dafür, dass die
Transaktionsinformationen weiterhin vom Master zum Slave fließen (und damit auch im
Fehlerfall dort zur Verfügung stehen), jedoch werden dieses Daten temporär (bis zum
erneuten Start des SQL Threads) hier nicht eingespielt.
Sofern keine direkten Transaktionen auf dem Slave durchgeführt werden, entspricht ein
angehaltener SQL Thread einer Art Sperre auf dem replizierten Server, bzw. der replizierten
Datenbank.
Abb.10: Sobald der Server ruht, kann mit dem Backup begonnen werden.
Sobald keine Aktionen mehr auf dem Slave ausgeführt werden (zur Sicherheit können auch
hier die Tabellen zusätzlich gesperrt werden), kann mit dem eigentlichen Backup
(mysqldump oder mysqlhotcopy) begonnen werden. Das Produktionssystem arbeitet in
dieser Zeit weiter.
Alternativ bzw. als Ergänzung kann man zusätzlich versuchen, die Backup-Zeiten durch
schnellere Sicherungskommandos (Ersatz für Copy-Befehle) zu optimieren. Logische
Sicherungen (mysqldump) scheiden als Strategie meist aus Zeitgründen aus.
Eine gute Möglichkeit die physikalischen Strukturen (Datendateien) des Servers und/oder von
einzelnen Datenbanken zu sichern bieten moderne Filesysteme und/oder Storagesysteme: z. B.
Solaris ZFS, NetApp Snapshot-Technologie.
Oftmals lassen sich die durch Sperren eingefrorenen Datenbanken innerhalb weniger
Sekunden logisch sichern (z. B. durch einen Snapshot), während die eigentliche Trennung von
aktiven und Backup-Filesystemen (z. B. durch Kopieren auf entfernte Platten und/oder
Bänder) erst nach dem Snapshot angegangen wird.
Dadurch wird die Sperrzeit des Servers/der Datenbank auf wenige Sekunden verkürzt.
Zusätzlich bieten diese Technologien – sofern die Backup-Informationen auch lokal gehalten
werden – im Fehlerfall extrem schnelle Restore-Zeiten. Die Laufzeit des Recoveries (SQLApply) kann natürlich durch den Einsatz einer solchen Technologie nicht verkürzt werden.
Selbstverständlich können auch replizierte Datenbanken über diese Mechanismen gesichert
werden.
Schlussbemerkungen
MySQL Datenbanken lassen sich relativ unproblematisch sichern und wiederherstellen.
Allerdings sollte ein Wiederherstellungskonzept sehr sorgsame geplant und auf die
vorhandene Infrastruktur abgestimmt werden.
Die Verantwortung für die erfolgreiche Erstellung von Backups liegt hier – noch stärker als
bei anderen Datenbankprodukten – in der Hand des Administrators. Er trägt nicht nur die
Verantwortung für das Konzept, sondern ist auch für die eingesetzten technischen
Komponenten (Storage Engine, Backup-Werkzeug, Binray Log-Pflege) und deren
Zusammenspiel verantwortlich.
Kontaktadresse:
Matthias Jung
ORDIX AG
Kreuzberger Ring 13
D-65205 Wiesbaden
Telefon:
Fax:
E-Mail
Internet:
+49 (0) 611 – 778 4000
+49 (0) 180 – 167349 0
[email protected]
www.ordix.de
Herunterladen