• Kameragurte
  • Shop
  • Bücher & Magazine
  • Workshops
  • Ich
  • Fototasche
  • Impressum
  • Datenschutz

Remote Webserver Backup mit Linux NAS

Paddy · Januar 18, 2008 · Web · 7 comments
0

Die folgende Anleitung habe ich mit einer Linksys NSLU2 und Unslung 6.10 inkl. OpenSSH ausprobiert. Sollte aber auch mit jeder anderen NAS, die mit Linux läuft und SSH-Zugriff von außen erlaubt zulassen.

Das Skript muss mit hoher Wahrscheinlichkeit von Euch noch angepasst werden. Es handelt sich nicht um eine AufDenServerOhneZuDenkenKopierenUndAusführen-Variante. Also Skript genau anschauen und verstehen.

Das Problem

Ich möchte von meinem Webserver jede Nacht ein Backup machen und dieses auf meinen NAS-Server zu Hause kopieren. Gesichert werden sollen die MySQL-Datenbanken und die Verzeichnisse mit den Dateien.

Die Voraussetzungen

  • Linux-Webserver mit der Möglichkeit Skripte auszuführen und Cronjobs zu erstellen
  • NAS mit Linux auf die man von außen Zugriff per SSH hat

Das Vorgehen im Groben

  • Ein Archiv der MySQL-Datenbanken mit tar erzeugen
  • Ein Archiv des zu sichernden Verteichnisses mit tar erzeugen
  • Archive per SCP übertragen
  • Archive auf dem Server löschen

Kopieren per SCP ohne Passwort-Eingabe

Da ich den SCP-Befehl benutze um die Dateien zu übertragen muss ich das Problem lösen diesen ohne Abfrage des Passwortes auszuführen. SCP kennt leider keinen Parameter um das Passwort mit in der Kommandozeile zu übergeben. Dir Syntax für unser Problem ist

scp <dateiname> user@host.de:/ziel/verzeichnnis

Danach wird allerdings nach einem Passwort gefragt, was wir zunächst umgehen müssen.

Dafür gibt es eine prima Anleitung, die ich für diesen Zweck verwendet habe. Einfach Step by Step abarbeiten.

Backup Script auf Server erstellen

Wenn das grundsätzliche Kopieren per SCP vom Server auf die NAS funzt, geht es an das Skript, welches alles automatisch ausführt. Dieses läuft später per Cronjob auf dem Webserver.

In dem Skript gehe ich von der Konfiguration auf meinem Rootserver aus. Das müsst Ihr evtl. für Eure Zwecke anpassen.

  • MySQL-Datenbanken liegen in /var/lib/mysql
  • Die Daten der einzelnen Domains liegen für neunzehn72.de in /home/n/neunzehn72.de
    Es gibt also für jeden Buchstaben ein Subdirectory, in diesem Fall „n“ wo dann neunzehn72.de liegt.

Skript Teil 1 – Die Variablen

today=`date +%Y%m%d`
webroot='/home'
dbuser='root'
dbpass='password'
databases=( neunzehn72_blog zweiteMySQLDB dritteMySQLDB )
domains=( neunzehn72.de zweite-domain.de dritte-domain.de )

databases sind die einzelnen Unterverzeichnisse unterhalb vom MySQL-Verzeichnis in denen die jeweiligen Datenbanken liegen.

domains sind auch jeweils die Unterverzeichnisse unterhalb des Webroots, in meinem Fall heißen die genau wie die Domain selbst.

Skript Teil 2 – Datenbanken sichern

for database in ${databases[@]}
do
filename=$today\_$database\_mysql.tar.gz
mysqldump -u $dbuser -p$dbpass --add-drop-table $database > /root/backup/$database.sql
tar zcvf /root/backup/$filename /root/backup/$database.sql >/dev/null
scp /root/backup/$filename user@host.dyndns.org:/path/to/save/backup
rm /root/backup/$filename
rm /root/backup/$database.sql
done

In dieser Schleife wird jede Datenbank per mysqldump exportiert und dann als Tar-Archiv im Verzeichnis /root/backup abgelegt. Anschließend dann per SCP auf die NAS geschoben und wieder auf dem Server gelöscht. Im Dateinamen des Archives ist jeweils das Tagesdatum enthalten.

Skript Teil 3 – Webroots sichern

for domain in ${domains[@]}
do
firstletter=${domain:0:1}
filename=$today\_${domain/./_}.tar.gz
tar zcvf /root/backup/$filename /home/$firstletter/$domain >/dev/null
scp /root/backup/$filename user@host.dyndns.org:/path/to/sav/backup
rm /root/backup/$filename
done

Der dritte Teil des Skriptes funktioniert ähnlich dem zweiten. Lediglich die Variable „firstletter“ wird erstellt, da ich den ersten Buchstaben der Domain für den Pfad benötige.

Das komplette Skript gibt es hier noch einmal zum Download.

Cronjob erstellen

Zuletzt müssen wir noch einen Cronjob erstellen. Ich lasse das Skript jede Nach um 5:00 Uhr laufen. Dazu in der crontab einen Eintrag erzeugen

0 5 * * * /root/backup_remote.sh > /dev/null

und die Crontab installieren. Wie das genau geht findet Ihr notfalls über Google.

Viel Spaß damit. Es bleibt genug Raum für Verbesserungen, z.B.

  • für jeden Tag ein Verzeichnis auf dem Backup-NAS erstellen
  • Backups nur für einen bestimmten Zeitraum aufbewahren
Paddy

Patrick Ludolph, Fotograf aus Hamburg und Gründer von Neunzehn72.
Ich mag jede Art von Fotografie, aber ein Mensch muss bei meinen Fotos meistens mit drauf sein.
Folgt mir gerne auf Instagram. Da gibt es die meisten aktuellen Fotos.

  Facebook   Pinterest   Twitter   Google+
backuplinuxnasremote
7 Comments:
  1. Das Sichern der MySQL-Dateien direkt ist keine gute Idee, steht auch irgendwo in der Dokumentation, da man sich da auch evtl. vorliegende LOCKs mitsichert und die Datenbank evtl. inkonsistent ist in der Sicherung.
    Laut Doku sollte man sich mit mysqldump –opt einen Dump erzeugen und den sichern.

    Jens · Januar 19, 2008
  2. Danke für den Hinweis. Das werde ich auf jeden Fall noch ändern.

    Paddy · Januar 19, 2008
  3. gutes tutorial. jedoch stimme ich jens zu. wenn du nur die dateien sicherst kannst du im schlimmesten fall nur datenschrott erhalten. oder daten die nicht mehr in der form vorhanden sind wie sie sollten.

    Rob · Januar 20, 2008
  4. Ich habs schon geändert. Muss nur noch hier den Post aktualisieren. Kommt im Laufe des Tages.

    Paddy · Januar 20, 2008
  5. Skript ist jezt aktualisiert und die Sicherung erfolgt per mysqldump.
    Danke für die Tipps 😉

    Paddy · Januar 20, 2008
  6. Ich würde ein –lock-tables oder –lock-all-tables an das mysqldump anhängen, da ansonsten auch da Inkonsistenzen auftreten können.

    Gruß
    Rolf

    Rolf Winterscheidt · Dezember 29, 2008

Leave a Comment! Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Melde Dich für unseren Newsletter an

Liste(n) auswählen:

Die nächsten Liveshows

Meine Presets für Lightroom

Chief Mate, der Quick-Release Gurt

Copyright © 2018 Patrick Ludolph
Diese Webseite verwendet Cookies, um Dienste bereitzustellen, die Nutzung der Website zu verbessern und Zugriffe zu analysieren. Informationen darüber, wie Sie diese Webseite verwenden, werden anonymisiert an Google weitergegeben. Wenn Sie die Webseite weiter nutzen, stimmen Sie der Verwendung von Cookies zu. Weitere Informationen finden Sie in unserer Datenschutzerklärung