MySQL-Datenbanken sichern

Etliche Weblogs, Wikis und Content Management-Systeme speichern den Inhalt – alles was ich schreibe – in MySQL-Datenbanken. MySQL-Datenbanken sind Dateien auf der Festplatte eines Webservers, diesen besitzt ein Internet-Dienstleister.

Spätestens nach einem Wechsel des Webservers will ich den Inhalt der alten Datenbanken einfügen in neue MySQL-Datenbanken mit wenig Aufwand.

Dazu sichere ich die Datenbanken des Webservers auf meinen lokalen Rechner. Weitere Gründe für die lokale Sicherung:

  1. Die Datenbank könnte beschädigt werden und nicht mehr (vollständig) wiederhergestellt
  2. Cracker und Schadsoftware könnten die Datenbank verändern
  3. Der Internet-Dienstleister könnte seinen Dienst einstellen ohne dass ich vorher meine Daten auf irgend eine Weise retten kann

In einem Artikel über die Prinzipien der Datensicherung schrieb ich, Backups sollen automatisch ablaufen. Bei mir sieht das so aus:

  1. Einmal täglich sichert auf dem Webserver das Programm mysqldump meine MySQL-Datenbanken mit den kompletten Einfügebefehlen
  2. Nach einer Woche wird die älteste Sicherung überschrieben, es existieren bis zu 7 Sicherungen, eine für jeden Wochentag
  3. Auf meinem lokalen Rechner ruft Cron täglich (automatisch) ein Skript auf; dieses veranlasst auf dem Webserver SQL-Dumps (1.) und speichert die SQL-Dumps auf die lokale Festplatte
  4. Inhalte, die das Weblog, Wiki, Content Management-System nur auf die Webserver-Festplatte speichern und nicht in die Datenbank, werden heruntergeladen und auf die lokale Festplatte gespeichert, sofern noch nicht geschehen oder diese auf dem Webserver modifiziert wurden
  5. Die Daten der lokalen Festplatte werden täglich auf eine externe Festplatte gesichert, die nur während der Sicherung eingeschaltet ist; wäre Geld kein Thema, würde ich die lokale Festplatte auf ein LTO 4-Streamerband sichern lassen

Der Webserver muss folgende Programme anbieten und auf irgend eine Weise ausführen lassen:

  • mysqldump
  • gzip, die Komprimierung von mysqldump könnte nicht funktionieren
  • mail

Dies berücksichtige ich bei der Auswahl eines Webservers.

Besser ist ein Webserver, bei dem ich zeitgesteuert Programme ausführen lassen kann, es reicht aber einer, der CGI-Skripte erlaubt, unter anderem Bash-Skripte, die sich für diese Aufgabe eignen.

Für den SQL-Dump schrieb ich zwei Bash-Skripte: Eines, das die Datenbank sichert und bei Fehlern eine E-Mail schickt und ein anderes, das für alle Datenbanken dieses Skript aufruft. Sie können beide herunterladen:

  1. Skript, das eine Datenbank sichert
  2. Skript, das für alle Datenbanken Skript 1 aufruft

Aus den Skripten löschte ich: Skript 1 verlangt ein Passwort, wird keines oder ein falsches überreicht, unternimmt es nichts und Skript 2 ruft Skript 1 mit einem Passwort auf.

Das Skript, das cron täglich aufruft auf meinem lokalen Rechner, ruft das CGI-Skript 2 auf mit dem Webbrowser lynx und dem Parameter --dump. Lynx zeigt die Skriptausgabe an und beendet sich, die Ausgabe wird umgeleitet in eine Logdatei.

Die Dateien, die im Dateisystem der Webserver-Festplatte gespeichert sind – die WordPress-, MediaWiki-, … -Installationsverzeichnisse – sowie die mysqldump-Backupdateien spiegelt das Perl-Skript mirror auf meine lokale Rechnerfestplatte (täglich aufgerufen durch cron). Es gibt weitere Programme, die Dateien eines Webservers spiegeln können, spontan fallen mir diese ein: wget und ncftp.

Stichwörter: , ,

Zu diesem Artikel können keine Kommentare mehr geschrieben werden.