Automatisiertes Backup von Datenbanken und Dateisicherung via SSH

Schon lange auf der ToDo Liste war bei mir ein automatisiertes Backup meiner Datenbanken auf diesem Server einzurichten.

Zur Gedächtnisstütze, und falls jemand ähnliches nützlich findet nun eine Beschreibung dessen was ich eingerichtet habe.

 

Anforderung

Ich wollte ein automatisiertes Backup einzelner Datenbanken (damit ich selektiv wiederherstellen kann), welches täglich läuft.

Zusätzlich wollte ich, für den Fall eines kompromittierten oder anderweitig nicht mehr zugreifbaren Servers diese Backupdateien außerhalb des gehosteten Servers speichern.

Daher sollte mein zu Hause befindliches NAS die Backupdateien automatisch holen.

 

Umsetzung

Datenbankbackup

Crontab

Das Backupscript soll regelmäßig ausgeführt werden, das mach man indem man in die Crontab Liste einen Eintrag macht – eine genaue Beschreibung der crontab Syntax findet man z.B. hier.

Mein Eintrag sieht wie folgt aus

15 3 * * * /verzeichnisname/dbbackup.sh

Das Backupscript

Das Script hat folgenden Inhalt

/bin/bash
mysqldump --user=USERNAME --password='PASSWORT' datenbankname > datenbankbackupdatei.sql | gzip > /Zielverzeichnis/`date '+%Y%m%d'`_datenbankname.sql.gz

Damit wird jede Nacht um 3:15 Uhr eine mit GZIP komprimierte Backupdatei im Zielverzeichnis erstellt, welche das Tagesdatum mit im Dateinamen trägt.

So würde die Datei die am 24.12.2017 erstellt wird 2017-12-24_datenbankname.sql.gz heißen.

Abholen der Dateien

Zum Abholen der Dateien habe ich gemäß der Anleitung von Heiko Schlittermann auf meinem NAS via

ssh-keygen -t dsa

einen SSH Key erstellt und diesen via

cat ~/.ssh/*.pub | ssh user@highwaytohoell.de 'umask 077; cat >>.ssh/authorized_keys'

auf meinen Webserver übertragen.

Dann habe ich via crontab -e ebenfalls einen Eintrag erzeugt:

30 3 * * * scp user@highwaytohoell.de:/Zielverzeichnis/* /mein/Verzeichnis

Damit werden jede Nacht um 3:30 Uhr die Backupdateien in /mein/Verzeichnis auf meinem NAS geschrieben.

Damit nicht jeden Tag alle Dateien abgeholt werden und sich die Backupdateien auf dem Server stapeln habe ich auf meinem Datenbankserver den Crontab Eintrag noch erweitert, via

55 3 * * * rm /Zielverzeichnis/*.gz

werden die Backupdateien nach Abholung gelöscht (im Zielverzeichnis liegen natürlich keine anderen Dateien mit .gz Endung, die würden sonst auch gelöscht). Somit liegen in diesem Ordner immer nur die aktuellen Dateien.

 

Diese Lösung ist mit Sicherheit weit von der Perfektion entfernt, so verliere ich sollte mein Internetanschluss zu Hause gestört sein möglicherweise mal einen Satz Backupdateien – da ich aber nicht täglich ändere kann ich damit gut leben.

Ich wollte eine Lösung die automatisch und dauerhaft funktioniert und das habe ich damit.

 

 


Beitrag veröffentlicht

in

von

Schlagwörter:

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen