[Skript] Inkrementelle Datensicherung

NiclasM

Enthusiast
Thread Starter
Mitglied seit
06.02.2007
Beiträge
4.331
Ort
Dortmund
Name : Inkrementelle Datensicherung
Version: v0.1
Typ : Backup


Beschreibung :


Ich habe dieses Skript geschrieben, weil ich nicht mehr Abhängig von DynDns und anderen Anbietern seien möchte. Außerdem habe ich dort einige Probleme gehabt. Beispielsweise dass der Router nicht immer die IP-Adresse aktualisiert o.ä. .

Das Skript besteht aus mehreren Teilen. Zum einen gibt es ein Skript für den Client(der zu Sichernde Server) und das Server Skript (auf den das Backup aufgespielt wird).

Das ganze ist so gestaltet, dass man Problemlos es schnell für einen neuen Server umschreiben kann, ohne sich mit langen befehlen auseinander zu setzen. Ich wollte mehr Transparenz reinbringen.

Erklärung Client Skript :


Der Client Updatet jede Minute seine IP in die MySQL-DB vom Hauptserver.

Erklärung Server Skript :

-Holt sich die aktuelle IP Des Clients
-Erstellt die nötigen Ordner und Log Files
-Sichert die Daten per SSH
-Schreibt eine Log File mit Datum, Abtrennung und den Infos welche Daten gesichert wurden.



Server Skript :

Code:
#!/bin/sh
# Created by Niclas Müller - mueller.niclas@googlemail.com

name=<Name der Sicherung Bsp.:Rechnungen>
trenner=----------------------------------------------
kunde=<KundenName>

user=<SSH User des Client Systems>
port=<SSH Port>
adress=`mysql -h <Host> -sN -uroot -p<Passwort> -D Kunden -e "SELECT IP FROM Server WHERE ID = 4"` 
source=/<Pfad auf dem Client der zu sichern ist>
target=/files/kunden/$kunde

options="-z -c -a -v -P --delete --rsync-path=/usr/bin/rsync"
logfile=/files/kunden/$kunde/log/$name.txt

mkdir -p /files/kunden/$kunde/log
touch $logfile

echo $trenner >> $logfile
date >> $logfile

rsync $options -e "ssh -l $user -p $port -o STRICTHOSTKEYCHECKING=no" $user@$adress:$source $target >> $logfile

Client Skript :

Code:
mysql -h <Host> -uroot -p<HostPasswort> -D Kunden -e "UPDATE Server SET IP = '`curl "http://www.networksecuritytoolkit.org/nst/cgi-bin/ip.cgi"`' WHERE Server = '<Kunden Name>';"



MySQL DB Struktur

db1kkr.jpg




Installation

-SSH Key Erzeugen (ssh-keygen -t rsa)
-SSH Key Koppieren (ssh-copy-id -i /home/<User>/.ssh/id_rsa.pub "-p <SSH Port> <User>@<Host>"
-In Crontab das Skript einfüngen ( * * * * * <Pfad zum Skript> )
-Serverseitig das Skript speichern , konfigurieren und in Crontab einfügen
( 00 02 * * * </Pfad zum Skript>)


Schlusssatz:

Die ganzen Vorgänge werden jeweils um 2 Uhr morgens gestartet, wenn niemand mehr Arbeitet oder Dateien geöffnet hat.
Des weiteren lässt sich das Skript verändern und verbessern, doch so ist es funktionstüchtig und läuft bei mir gut.

PS : Über Feedback würde ich mich freuen ;)
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
du hast in deinem Script nur eine Source, das finde ich ein bissel seltsam.
Es ist ja nicht so, dass alle Files die man sichern will, im gleich Ordner liegen.

Wie machst du den restore von Files?
 
Den Restore einfach per scp ...
Klar es ist so ausgelegt, dass halt nur ein Ordner gesichert wird, aber ich halte die meisten sachen immer in einem Ordner auf einem Server, um das einfacher zu Verwalten.

Trozdem kannst du auch mehrere crons anlegen für mehrere Ordner ;)
 
Den Restore einfach per scp ...
Klar es ist so ausgelegt, dass halt nur ein Ordner gesichert wird, aber ich halte die meisten sachen immer in einem Ordner auf einem Server, um das einfacher zu Verwalten.

d.h. du machst den Restore selber von Hand und nicht deine Kunden? Ganzschön umständlich für deine Kunden. Vorallem weil es keine Revisionen von einem File gibt und smot du dir das Script auch sparen kannst. Was nützt ein Backup, wenn auf dem Backupserver immer nur die neuste Datei liegt?

Warum machst du das ganze nicht mit "rdiff-backup", wenn du schon rsync nutzt oder schnell selber schreiben, da du ja eh ein DB nutzt.

Trozdem kannst du auch mehrere crons anlegen für mehrere Ordner ;)
naja, dann doch lieber ein schönes Script was ein Configfile ausliest ;) geht mit perl total einfach :)
 
Zuletzt bearbeitet:
d.h. du machst den Restore selber von Hand und nicht deine Kunden? Ganzschön umständlich für deine Kunden


zum einen war das noch nie Nötig, und zum anderen ist das garnicht gefordert dass mehre Versionen vorliegen....
 
Ich finds cool, dass jemand seine (funktionierenden) Scripte anbietet, Daumen hoch.
...Auch wenn ich zurzeit eher meinen Mac und die Time Machine malträtiere als meine Linux-Box :fresse:
 
Kleiner Tipp:

Vielleicht solltest du für deine Logs noch ein Zeitstempel verpassen. Ist manchmal übersichtlicher.

Code:
date=`date "+%Y%m%d_%H%M%S"`
logfile=/files/kunden/$kunde/log/$name_$date.txt

Nutze übrigens auch rdiff-backup, dank ulukay :wink:
 
Ach ganz übersehen die Zeile^^ Naja ist alles Geschmackssache.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh