Shell: Backup-script

Veröffentlicht von Marcel - 31. Juli 2016

Eine einfache Backup-Lösung lässt sich schnell und einfach realisieren. Es sollen Datenbank sowie Dateien gesichert und Sicherungen, die älter als eine bestimmte Zeit sind, gelöscht werden.

backup-1050x700

Eine einfache Backup-Lösung lässt sich schnell und einfach realisieren. Es sollen Datenbank sowie Dateien gesichert und Sicherungen, die älter als eine bestimmte Zeit sind, gelöscht werden.

Der Anfang macht eine einfache .sh Datei. Die erste Zeile sieht wie folgt aus:

#/bin/bash (alternativ: #!/bin/bash)

Zeilen beginnend mit # sind Kommentarzeilen und werden nicht ausgewertet, eine Ausnahme ist die hier erste Zeile, diese definiert mit welchem Kommandointerpreter (also welcher Shell) das Script ausgewertet werden soll.

Nun kommt der erste Befehl (Vorrausetzung ist, dass mysql auf der shell funktionert):

mysqldump --host=db.host.com --user=user123456 --password=supersafepw mydbname > /pathtobackup/backup/BA-Database-Backup-`date +%Y-%m-%d-%T`.sql;

Es wird ein kompletter Dump der Datenbank gemacht, hierzu werden die üblichen Parameter und der Pfad wohin der Dump gespeichert werden soll angegeben. Um identifizieren zu können, wann die Datei erstellt wurde, wird in den Namen der Datei noch das aktuelle Datum und einen eindeutigen Namen zu späteren identifizierung (BA).

Die dritte Zeile:

tar -czf /pathtobackup/backup/BA-Files-Backup-`date +%Y-%m-%d-%T`.tar.gz /pathtofiles/filestobackup/;

Mit dem tar kann ein Ordner angegeben werden, welcher komplett gezipt, komprimiert und wo er gespeichert  werden soll, auch hier wird wieder Datum und eindeutiger Namensvorsatz (BA) hinzugefügt. Die Parameter stehen für:
c = Ein neues Archiv erzeugenz = Archiv zusätzlich mit gzip (de)komprimieren
f = Archiv in angegebene Datei schreiben. / Daten aus angegebener Datei lesen. Diese Option muss die letzte sein, da die nachfolgende Zeichen als Datei interpretiert werden. Z.B. würde -cfv zu einer Fehlermeldung führen.

Die vierte Zeile:

find /pathtobackup/backup/ -name "BA*" -mtime +30 -delete;

Es werden in mit diesem befehl alle Dateien in einem Ordner gesucht, die mit dem Namen „BA“ anfangen (-name „BA*“), also die erstellen Backups und älter als 30 Tage sind (-mtime +30). Alle gefundenen Dateien werden dann gelöscht (-delete).

Komplett:

#/bin/bash (alternativ: #!/bin/bash)
mysqldump --host=db.host.com --user=user123456 --password=supersafepw mydbname > /pathtobackup/backup/BA-Database-Backup-`date +%Y-%m-%d-%T`.sql;
tar -czf /pathtobackup/backup/BA-Files-Backup-`date +%Y-%m-%d-%T`.tar.gz /pathtofiles/filestobackup/;
find /pathtobackup/backup/ -name "BA*" -mtime +30 -delete;

Fazit:

Ein einfaches Backup-Script lässt sich sehr einfach, in nur 4 Zeilen Code, erstellen. Wichtig ist, dass das Script nicht öffentlich zugänglich ist, da Passwörter offen in der Datei stehen.
Sinnvolle Erweiterungen wären das speichern von Exit-Status der einzelnen Funktionsaufrufe. Diese könnten dann, beispielsweise per Mail an den Admin gesendet werden (Funktion „mail“).
Zusätzlich kann man dieses Script auch von einem cronjob regelmäßig ausführen lassen.

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

Das könnte Dich auch interessieren

Ein Ausflug in die digitale Welt der Media Favoriten

Als Mediengestalter wird man eigentlich immer in zwei Bereiche eingeteilt - Digital und Print. Doch was sind eigentlich die genauen Unterschiede? Kann ich als "...

Vom schwierigen Unterfangen, einen Blog-Beitrag zu schreiben

"Kann ich dich am 11.05. für einen Blog-Beitrag einplanen?" Seitdem unsere reizende Praktikantin Jana ihr Praktikum bei uns Internet Halunken begonnen hat, ist...

PHP cURL – Eine kurze Einführung

cURL ist eines der wichtigens Tools für Entwickler. Durch den Einsatz von cURL ist es möglich Daten aus unterschiedlichen Quellen abzufragen. Die unterschiedl...