Datensicherung mit MySQL
Das Thema der Replikation und Sicherung von MySQL-Datenbanken ist ein weites Feld, zu dem es viele Bücher und Software gibt. Es kann hier nur angerissen werden. In einer Organisation, die eine Datenbank einsetzt, sollte es mindestens einen Experten auf diesem Gebiet geben, der für die nötigen Replikationen und Sicherungen zuständig ist.
Sicherungskopien
Bei der Sicherungskopie werden die aktuellen Inhalte der Datenbank kopiert. Änderungen, die danach erfolgen, sind dann nicht gesichert. Sie würde bei einer Wiederherstellung der Datenbank aus der Kopie verloren gehen. Falls alle Tabellen nach dem Herstellen der Sicherungskopie versehentlich gelöscht werden, können diese von der Sicherungskopie wiederhergestellt werden. Um zu verhindern, daß unbemerkt eine Datenbank mit versehentlich gelöschten Tabellen die letzte Sicherungskopie überschreibt, sollte auch immer mehrere alte Sicherungskopien aufbewahrt werden.
Es kann jedoch hilfreich sein, zusätzlich zu Sicherungskopieren auch noch mit einem Zweitrechner für eine Replikation zu arbeiten, da eine Sicherungskopie der Datenbank wiederum nichts nutzen würde, wenn der Hauptrechner ausfällt.
Eine spezielle Aufzeichnungsdatei erlaubt es auch ohne Replikation oder Sicherungskopie die letzten Änderungen wiederherzustellen. Sie ist aber nicht als alleinige Sicherung geeignet, da sie ebenfalls beschädigt werden könnte.
Sicherungsstrategien
Wenn die Daten sehr wichtig sind, könnte mit mehreren Zweitrechnern für Replikationen und einer ausgefeilten Vorgehensweise für regelmäßige Sicherungskopieren gearbeitet werden, bei der mehrere Sicherungskopieren in verschiedenen zeitlichen Intervallen erzeugt und sicher verwahrt werden. In solch einem Fall sollten verschiedene Arten von Ausfällen und Wiederherstellungen auch regelmäßig geübt werden, um sicher zu sein, daß eine Wiederherstellung dann im Notfall auch wirklich gelingt.
Das Programm »mysqldump«
Das Programm »mysqldump« gehört zu MySQL.
Das folgende Kommando schreibt das Schema »S« in die Datei »mysqldump.sql«.
Das Kommando »mysqldump« ist hierzu nicht in den MySQL-Klienten einzugeben, sondern in eine Kommandokonsole des Betriebssystems. Diese Vorgehensweise ist nur für Personen praktikabel, die bereits gelernt haben, wie Betriebssystemkommandos verwendet werden.
- Betriebssystem-Konsole
mysqldump -u root -p S >mysqldump.sql
Das Schema wird als Skript ausgegeben, das die gesicherte Datenbank wiederherstellt.
Das folgende Kommando schreibt alle Schemata in die Datei »mysqldump.sql«.
- Betriebssystem-Konsole
mysqldump -u root -p --all-databases >mysqldump.sql
Vor dem Einsatz dieses Kommandos auf Datenbanken, die ständig im Betrieb sind, sollten seine Möglichkeiten zuvor gründlich studiert werden. Mehr Details finden sich auf der folgenden Webseite.
- Webseite
http://dev.mysql.com/doc/en/mysqldump.html
MySQL kann mit verschiedenen Datenbankmaschinen, wie InnoDB oder MyISAM, verwendet werden.
Bei Verwendung von InnoDB, ist es beispielsweise möglich durch Verwendung der Option »--single-transaction« unter gewissen Umständen, eine konsistente Sicherung einer Datenbank im laufenden Betrieb zu erstellen.
Zur Sicherung wichtiger Datenbanken, die häufig geändert werden, könnten beispielsweise täglich, wöchentlich, monatlich und jährlich Sicherungskopien angefertigt werden, von den die jeweils letzten drei aufbewahrt werden. Dies könnte es dann beispielsweise erlauben, eine versehentlich gelöschte Tabelle wiederherszustellen, wenn der Fehler erst nach einigen Tagen bemerkt wird, so daß eine Herstellung von den täglichen Kopien schon nicht mehr möglich ist, weil diese auch alle schon die gelöschte Tabelle enthalten.
Das Programm »mysqldump« erlaubt keine inkrementellen Sicherungen.
Wiederherstellung aus einem SQL-Skript
Das folgende Kommando zeigt eine Möglichkeit, eine mit »mysqldump« erstellte Sicherung wiederherzustellen.
Die Sicherung ist ein Skript. Dieses Skript wird im folgenden Kommando beim Aufruf des Klienten als Eingabe festgelegt.
- Betriebssystem-Konsole
mysql -u root -p <mysqldump.sql
Alternativ kann
- Konsole
source mysqldump.sql
Die Verarbeitung eines Skripts erfolgt relativ langsam.
Wenn eine Tabelle als CSV-Datei vorliegt, so wird sie relativ schnell importiert. Allerdings würden Information über die genauen Spaltentypen von Tabellen und andere Einstellungen verloren gehen, wenn man Tabellen auf diese Weise speichert und wiederherstellt.
Bei wichtigen Datenbanken, sollte die Wiederherstellung auch (auch einem anderen System) regelmäßig geübt werden (bis hin zu Inbetriebnahme einer Kopie des Systems aus einer Sicherungskopie), um eventuelle Probleme zu erkennen und sicher zu sein, daß die Wiederherstellung dann im Notfall auch wirklich gelingt.
Speicherort der Datenbankdateien
Die Datenbankdateien finden sich unter einem Speicherort, der von Details der Installation und Version abhängt. Das folgende Beispiel einer bestimmten Installation und Version liefert einen Anhaltspunkt.
- Speicherort (Beispiel)
C:\ProgramData\MySQL\MySQL Server 5.7\data
%ALLUSERSPROFILE%\MySQL\MySQL Server 5.7\data
Die Version »5.7« ist in dem obigen Speicherort möglicherweise anzupassen.
Das Datenverzeichnis wird oft in einer »my.ini«-Datei festgehalten.
Eine Kopie der Datendateien innerhalb des Datenverzeichnisses kann als Sicherung verwendet werden, wenn sichergestellt ist, daß MySQL nicht so konfiguriert wurde, daß bestimmte Dateien außerhalb jenes Verzeichnisses gespeichert wurden, der Server während des Kopierens nicht läuft und die Kopie mit der gleiche oder einer späteren Version von MySQL verwendet wird. Außerdem muß immer das vollständige »datadir« mit allen Unterverzeichnissen und Dateien kopiert werden.
An Stelle einer Beendigung des Servers kann auch »FLUSH TABLES WITH READ LOCK« verwendet werden, um die Tabellendateien zu stabilisieren. Der Server kann die Daten nun nur noch lesen, aber nicht mehr verändern. Mit »UNLOCK TABLES« können diese dann wieder für Änderungen freigegeben werden.
Nach einigen Quellen, kann dieses Verfahren angewendet werden, wenn Daten zu einer Installation übertragen werden, welche unter demselben Betriebssystem läuft und dieselbe MySQL-Version verwendet.
Die Dateien sollten nicht kopiert werden, während der Datenkbank-Server (also das Datenbanksystem) läuft.
Binäres Mitschreiben
Die binäre Mitschrift enthält Informationen über Änderungen an einer Datenbank.
Sie kann verwendet werden, um nach dem Wiederherstellen der Datenbank aus einer Datensicherung noch Änderungen wiederherzustellen, die nach dem Erstellen der verwendeten Sicherungskopie erfolgt sind.
Weitere Informationen findet man unter der folgenden URI.
- Quelle
http://dev.mysql.com/doc/en/binary-log.html
Zugriff über Programme
Es ist auch möglich, mit vom Benutzer der Datenbank geschriebenen Programmen (beispielsweise in Perl, Java oder PHP ) auf die Datenbank zuzugreifen und darüber Sicherungskopien oder Protokolle anzulegen, die dann für eine Wiederherstellung verwendet werden können.
Sicherung mit CSV
Falls eine Datenbank nur wenige Tabellen enthält und nicht ständig im Einsatz ist, könnten die Inhalte auch durch Export nach CSV gesichert werden. Dies hat den Nachteil, daß die Stuktur der Datenbank (wie die Datentypen von Spalten) dabei nicht gesichert werden (diese müssen dann extra auf andere Weise gesichert werden). Ein Vorteil ist es, daß das Einlesen von CSV -Dateien schneller gehen kann als die Ausführung von Skripten. Zum Einlesen solcher Dateien gibt es auch das Programm »mysqlimport«.
xtrabackup
Ein weiteres, kostenloses Programm zum Herstellen von Sicherungskopien von MySQL heißt xtrabackup.
MySQL Enterprise Backup
MySQL Enterprise Backup ist ein kostenpflichtiges Sicherungsprogramm.
- URI
https://dev.mysql.com/doc/workbench/en/wb-mysql-enterprise-backup.html
Replikationen
Die sogenannte Replikation einer Datenbank stellt sicher, daß sich eine aktuelle Kopie der Datenbank auf einem Zweitrechner befindet, die im laufenden Betrieb ständig aktualisiert wird. Falls der Hauptrechner ausfällt, könnte dann nach relativ kurzer Zeit mit dem Zweitrechner weitergearbeitet werden, da dieser den aktuellen letzten Stand der Datenbank enthält.
Falls auf dem Hauptrechner jedoch versehentlich ein Kommando eingegeben wird, das alle Tabellen der Datenbank löscht, dann wird dieser Löschvorgang auch sofort automatisch auf dem Zweitrechner nachvollzogen. Die gelöschten Tabellen können daher dann nicht vom Zweitrechner wiederhergestellt werden. Deswegen ist die Replikation der Datenbank nicht als einzige Form der Datensicherung brauchbar.
Einrichten einer Replikation
Die Einrichtung einer Replikation ist schwierig und wird nicht immer benötigt. Deswegen wird sie hier nicht im Detail beschrieben.
Die folgende Quelle enthält weitere Information:
- Quelle
http://dev.mysql.com/doc/en/replication-howto.html