Auf den Punkt: Einfache inkrementelle Backups mit MySQL
Einführung in Binary Logs
Eine einfache und recht elegante Lösung hierfür ist die Verwendung von Binary Logs. In der Regel werden diese für die Replikation von Datenbank zwischen mehreren Systemen verwendet, aber Binary Logs sind auch zur Datensicherung konzipiert. Sie sind dabei grob mit Transaction Logs auf Microsoft SQL Server vergleichbar.
Vollständige Sicherung mit mysqldump
Dies sind Beispiele, die an die eigenen Bedürfnisse angepasst werden müssen. Gewöhnlich werden Datenbanken mit dem MySQL-eigenen Tool mysqldump vollständig gesichert:
Bitte keine Kommandos per Copy ’n Paste auf Produktivsystemen ausführen, ohne zu verstehen, was diese auslösen < mysqldump -u x -p y -r dumpfile.sql example_db
Herausforderungen bei großen Datenbanken
Während sich bei kleineren Datenbanken ein solcher Dump auch im laufenden Betrieb erstellen lässt, ohne das parallele Datenbankzugriffe spürbare Wartezeiten in Kauf nehmen müssen, gestaltet es sich bei größeren Datenbanken etwas schwieriger. Die Erstellung eines Dumps bei Datenbanken mit einer Größe über 1 GByte kann in einem produktiven System über 10 Sekunden Wartezeit für die Anwender bedeuten. Im Hinblick auf die Aktualität der Sicherung müsste dies dann halbstündlich oder gar viertelstündlich ausgeführt werden, was die Akzeptanz bei den Anwender deutlich strapazieren würde.
Binary Logs zur Datensicherung
Eine einfache und recht elegante Lösung hierfür ist die Verwendung von Binary Logs. In der Regel werden diese für die Replikation von Datenbank zwischen mehreren Systemen verwendet, aber Binary Logs sind auch zur Datensicherung konzipiert. Sie sind dabei grob mit Transaction Logs auf Microsoft SQL Server vergleichbar.
Konfiguration von Binary Logs
Jede Änderung an Datenbanken, für die Binary Logs aktiviert sind, werden dabei in entsprechende Dateien geschrieben und können im Fehlerfall wie Inkremente, aufbauend auf dem letzten Vollbackup, eingespielt werden. Dazu wird für die zu sichernde Datenbank das Binary Log in der Konfiguration des MySQL Servers aktiviert.
Aktivierung und Verwaltung von Log-Dateien
[mysqld] … log_bin = /var/log/mysql/mysql-bin.log expire_logs_days= 2 max_binlog_size = 100M binlog-do-db = example_db … Anschließend natürlich durch entsprechendes Reload die Konfiguration aktivieren. service mysql reload
Automatisierte Sicherung mit Cronjob
Nun findet sich bereits die erste Log Datei im Verzeichnis /var/log/mysql/ die dann beispielsweise mysql-bin.000001 benannt sein könnte. Hinzu kommt der entsprechende vollständige Dump außerhalb der Produktivzeit, in diesem Fall per Cronjob um 3:30Uhr: 30 3 * * * /usr/bin/mysqldump -u x -p y –flush-logs –master-data=2 -r /var/log/mysql/dump.sql example_db