Wozu?
Du hostest einen Blog oder mehrere Webseiten selbst und fragst dich, wie dazugehörenden Datenbanken schnell, einfach, kostenlos und vor allen Dingen voll automatisiert gesichert werden können? Vielleicht betreibst du aber auch ein NAS zuhause oder einen anderen Rechner, der statt eines vollständigen Systembackups vielleicht nur eines für bestimmte Dateien oder Verzeichnisse benötigt. Vielleicht verwendest du aber bereits ein Systembackup und möchtest eine schlanke Lösung, um bestimmte Daten in kürzeren Abständen sichern zu können.
Zu den besonders wichtigen Daten, die ein tägliches Backup erfordern gehören eindeutig Datenbanken, weshalb diese Methode vor allen Dingen für Betreiber kleinerer Webseiten, Projekte oder Plattformen gedacht ist.
Was ihr benötigt
- Eine Datenbank die zu sichern ist. MySQL oder MariaDB, sowie deren Zugangsdaten
- Ein Konto beim Cloudspeicherdienst Mega.nz
- Ausreichende Benutzerrechte zum Erstellen von Cronjobs (alternativ Tasks unter Windows)
- Optional: 7zip für verschlüsselte Archive
Schritt 1: Megatools installieren
Bei Megatools handelt es sich um eine Sammlung von schlanken Kommandozeilentools mit sehr wenigen Abhängigkeiten. Für unsere Zwecke ist dies perfekt, da sich diese auch einfach in Skripts ansprechen lassen. Für alles andere könnte man schließlich die Weboberfläche oder den offiziellen Sync-Client nutzen.
Die geläufigsten Linux Distributionen wie Debian oder Ubuntu haben Megatools bereits in ihre Repositorien übernommen. In diesem Fall kann das Tool einfach mit der Paketverwaltung eurer Wahl installiert werden. Gehen wir davon aus, daß diese vorhanden sind, so installieren wir ganz einfach mit apt-get.
sudo apt-get update
sudo apt-get install megatools
In jedem Fall könnt Ihr euch die Quelldateien direkt von der Webseite des Herstellers herunterladen. Auch Windows-Nutzer kommen hier zum Zug. Fortgeschrittene Installatoinsanleitungen finden sich auch auf deren Seite auf Github.
Schritt 2: Konto eröffnen bei Mega.nz
Warum ausgerechnet Mega.nz?
Mega.nz ist ein Anbieter von Cloudspeicher und davon gibt es viele da draußen. Mit 50GB Speicherplatz verfügen diese über ein sehr großzügiges, kostenloses Angebot. Das Versprechen um Privatsphäre und Ende-zu-Ende Verschlüsselung der Daten ist ein großes Plus. Ob man darauf vertrauen möchte, sollte man sicherlich auch von der Wichtigkeit der übertragenen Daten abhängig machen. Falls eine zusätzliche Schicht an Sicherheit benötigt wird ist es allerdings ein leichtes die Daten vor der Übertragung durch ein Archivierprogramm verschlüsseln zu lassen. Darauf werden wir am Ende dieser Anleitung noch einmal eingehen.
Ein entscheidender Punkt ist jedenfalls, daß der auserwählte Dienst auch Clients für die Betriebssysteme unserer Wahl anbietet. Zusätzlich bietet das Vorhandensein von Schnittstellen und Kommandozeilentools überhaupt erst die Möglichkeit Vorgänge wie Backups auch vollautomatisch durchführen zu können.
Konto eröffnen mit Megatools
Da Megatools bereits in einem vorherigen Schritt installiert wurde, können wir damit auch die Registrierung eines neuen Kontos über die Kommandozeile erledigen. Falls du bereits über ein Konto auf Mega verfügst und dieses für Die Backups nutzen möchtest, kannst du diesen Schritt überspringen.
megareg --register --name=deinName --email=deineEmailadresse –password=deinPasswort
Fügt an entsprechender Stelle euren Namen, E-mailadresse und ein Passwort eurer Wahl ein. Der Befehl spuckt nach kurzer Zeit einen Hinweis wie diesen aus:
Registration email was sent to m462496@mvrht.net. To complete registration, you must run:
megareg --verify hyKBkmshlfijsdflk==:21iFCAAAAAAAAAAAmKZX4A==:OvomTKIzzwk @LINK@
Diese Zeile könnt ihr komplett aus der Konsole kopieren und darunter wieder einfügen (das Konto hinter der Beispielzeile oben wurde unkenntlich gemacht). In der Zwischenzeit solltet ihr eine E-mail mit einem Bestätigungslink erhalten haben. Diesen kopiert ihr aus der E-mail und setzt ihn an Stelle der Zeichenkette @LINK@ ein. Den erfolgreichen Abschluß des Vorgangs quittiert uns ein freundlicher Hinweis.
Account registered successfully!
Schritt 3: Datenbank Dumps speichern
Datenbanken sind nicht in herkömmlichen Dateien organisiert. Daher muß für ein Backup ein jeweils aktuelles Abbild (ein Dump) vor der Übertragung gespeichert werden. Hierzu benutzen wir als weiteres Tool mysqldump, welches in einer Installation von MySQL oder MariaDB bereits enthalten ist.
Welche Komprimierung sollte man benutzen?
Zur Archivierung der erzeugten Dateien bieten sich mehrere Programme an. Gzip und xz dürften bei den meisten Serverbetriebssystemen bereits vorinstalliert sein (unter Debian und Ubuntu definitiv der Fall). 7z ist in allen Repositorien verfügbar und kann einfach über Kommandozeile installiert werden (siehe unten).
Letzten Endes muß hier eine Abwägung zwischen Dateigröße und Rechenaufwand getroffen werden. Die Tools 7z und xz nutzen denselben, sehr effizienten LZMA Algorithmus und erzeugen schon in der geringsten Komprimierungsstufe bessere Ergebnisse als gzip in der höchsten Stufe. Allerdings verlangt es deutlich mehr Rechenzeit, eine Ressource mit welcher ihr auf einem Webserver sparsam umgehen solltet.
Aus der Kommandozeile
mysqldump -u root --password='deinMySQLPasswort' --all-databases | gzip > /dein/backup/Verzeichnis/DB_backup_`date +\%Y\%m\%d`.sql.gz
Für kleinere Dateien kann in der Kommandozeile das gzip einfach durch xz ersetzt werden. Wir setzen allerdings einen Parameter hinzu, die geringste Komprimierungsstufe für kürzere Rechenzeiten zu verwenden. Diesen könnt ihr nach eigenem Gutdünken mit Werten von 1 bis 9 ersetzen (9 = höchste Stufe). Als Dateiformat möchten wir gz durch xz ersetzen.
mysqldump -u root --password='deinMySQLPasswort' --all-databases | xz -1 > /dein/backup/Verzeichnis/DB_backup_`date +\%Y\%m\%d`.sql.xz
Schritt 4: Upload der Dateien
Zunächst bereiten wir ein Verzeichnis auf unserem Cloudspeicher vor, wohin die Backupdateien abgelegt werden. Zugangsdaten sind natürlich entsprechend zu ergänzen.
megamkdir -u deineEmail -p deinPasswort /Root/Backup/DB_dumps
Anschließend benutzen wir folgenden Befehl um das gesamte Verzeichnis unserer Datenbankbackups hochzuladen. Alle Angaben sind natürlich durch eure Kontodaten, Passwort und das Verzeichnis zu ersetzen, wo eure Backups gespeichert sind.
megacopy -u deineEmail -p deinPasswort -l /lokales/Backupverzeichnis -r /Root/Backup/DB_dumps
Falls nötig können wir den Erfolg unserer Operation noch einmal überprüfen indem wir vorhandene Dateien auflisten lassen.
megals -u deineEmail -p deinPasswort
Schritt 5: Automatisierung durch Cronjobs
Wie jedes Backup wollen wir auch hier die Erzeugung der Datenbank Dumps und das Hochladen derselben auf Mega automatisieren. Ein Backup funktioniert nur zuverlässig, wenn es kein manuelles Handeln mehr erfordert. Wir erstellen dafür einige Zeilen in der Crontab des Servers.
crontab -e
Dieselbe oben verwendete Kommandozeile lässt sich auch in Cron verwenden. Es müssen nur noch Angaben hinzugefügt werden, zu welchen Zeiten das Backup periodisch durchgeführt werden soll.
30 3 * * * mysqldump -u root --password='deinMySQLPasswort' --all-databases | gzip > /dein/backup/Verzeichnis/DB_backup_`date +\%Y\%m\%d`.sql.gz
Oder so, falls ihr xz zur Komprimierung verwenden möchtet.
30 3 * * * mysqldump -u root --password='deinMySQLPasswort' --all-databases | xz -1 > /dein/backup/Verzeichnis/DB_backup_`date +\%Y\%m\%d`.sql.xz
In beiden Beispielen wird der Befehl jeden Tag um 03:30 Uhr ausgeführt. Praktischerweise sollte hier eine Zeit gewählt werden, in welcher euer Server erfahrungsgemäß am wenigsten Arbeit hat. Jede erdenkliche Zeit kann gewählt werden, mehrmals wöchentlich, bestimmte Wochentage, stündlich. Näheres dazu kann in diesem Handbuch zu Cron nachgeschlagen werden.
Die Übertragung des Backups in den Cloudspeicher muß nun ebenfalls automatisiert werden. Eine weitere Zeile in Cron wird hinzugefügt.
15 5 * * * megacopy -u deineEmail -p deinPasswort -l /lokales/Backupverzeichnis -r /Root/Backup/DB_dumps
Zur Ausführung wählen wir einen Zeitpunkt, dessen Abstand groß genug gewählt wird damit das Backup zwischenzeitlich abgeschlossen wurde. In diesem Fall jeden Morgen um 05:15 Uhr.
Schutz des Passworts
Es gibt gute Gründe das Passwort eures Cloudspeichers gut zu schützen und deshalb nicht in Klartext in ein Skript oder Crontab hineinzuschreiben. Die Zugangsdaten lassen sich in einer Datei mit entsprechend eingeschränkten Zugriffsrechten ablegen. Dies erkläre ich in einem separaten Artikel.
Backups zurückspielen
Zur Wiederherstellung der gesicherten Datenbanken entpacken wir den komprimierten Dump und spielen ihn in MySQL zurück. Das ganze in einem Befehl. Zuvor jedoch suchen wir auf unserem Mega Cloudspeicher das gewünschte Backup, lassen uns nochmal alle gespeicherten Dateien in unserem Backupverzeichnis auflisten.
megals -u deineEmail -p deinPasswort
Die Datei unserer Wahl laden wir so herunter.
megaget -u deineEmail -p deinPasswort /Root/Backup/DB_dumps/BackupDateiname
Selbige Datei wird in einer Zeile entpackt und in MySQL importiert
gunzip < BackupDateiname | mysql -u root -p
Folgendes falls wir xz Archive verwenden.
Unxz < BackupDateiname | mysql -u root -p
Optional: Dateien verschlüsseln mit 7zip
Ein wesentliches Merkmal des Cloudspeicheranbieters Mega.nz ist das Versprechen für alle Dateien vom Rechner des Benutzers ab eine Ende-zu-Ende Verschlüsselung durchzuführen. Es gibt jedoch einige Gründe diesem Versprechen zu mißtrauen. In diesem Fall kann die Verschlüsselung von 7zip genutzt werden.
Zur Archivierung:
mysqldump -u root --password='deinMySQLPasswort' --all-databases | 7z -si -pDeinPasswort /dein/backup/Verzeichnis/DB_backup_`date +\%Y\%m\%d`.sql.7z
Ein Nachteil ist nun leider, daß das Archivpasswort im Klartext in der Kommandozeile steht, falls wir es in ein Skript oder Crontab einbauen.
Zur Wiederherstellung:
7z e | mysql -u root -p