Ich möchte meine Backups automatisieren. Wie kann ich das einrichten?
Automatisierte Backups sind nicht Teil von Confixx. Mit Hilfe von
Cronjobs ist es aber dennoch möglich. Als Zielordner wählen wählen wir
das Files-Verzeichnis. Die Backups werden im Confixx-Format angefertigt
und können so bei Bedarf bequem über die Confixx-Oberfläche
wiederhergestellt werden.
1. Einfaches Backup des Home-Verzeichnis und der Datenbank
ohne Rotation
Gehen Sie im Confixx auf Einstellungen->Crontab. Das Backup soll in
diesem Fall täglich um 0 Uhr gemacht werden. Takten Sie es nicht kürzer
als täglich und richten Sie es auch nicht zu Lastzeiten (8 bis 23 Uhr)
ein, da das Backup je nach Größe sehr viel Systemleistung benötigt. Um
das Backup nun täglich um 0 Uhr auszuführen, sind folgende Werte
einzutragen:
Minute: 0
Stunde: 0
Tag im Monat: *
Monat: *
Wochentag: *
Der erste Cronjob packt dass html-Verzeichnis (dies muss in das Feld
Befehl):
|
rm -f ~/files/html.tar.gz; cd
~/html; tar czf ~/files/html.tar.gz * |
Der zweite all unsere Datenbanken. Dieser Befehl ist etwas komplexer,
aber bis auf das Passwort (kursiv fett) so zu übernehmen:
|
rm -f
~/files/mysql.tar.gz; PASSWORD="PASSWORT";
USER=`whoami`; DBS=`mysql -u $USER -p$PASSWORD -B -e "SHOW DATABASES" |
grep $USER`; PARAM="-cf"; cd ~/files/; for db in $DBS; do mysqldump -u
$USER -p$PASSWORD -B -n --add-drop-table $db
> $db; tar $PARAM mysql.tar $db; rm $db; PARAM="-rf"; done; gzip
mysql.tar |
|
Wichtig: Der obige Befehl wird in der SSH-Umgebung aufgrund des
Fehlens von mysqldump nicht funktionieren! PASSWORT ersetzen
Sie bitte durch Ihr MySQL-Passwort.
2. Backup des Home-Verzeichnis und der Datenbank mit Rotation
Um Backups von verschiedenen Zeiträumen zur Verfügung zu haben, müssen
wir, um auch den Speicherverbrauch einzuschränken eine Rotation
einführen. Zunächst wollen wir ein tägliches Backup machen. Wir wollen
auf die letzten vier Tage zurückgreifen können.
Dazu sind bei den Zeiten wieder die gleiche Zahlen einzutragen (die
Uhrzeit können Sie natürlich anpassen).
Der Befehl ändert sich jedoch ein wenig. Es wird zunächst rotiert, und
dann gepackt:
Zunächst werden die alten Dateien rotiert. Die Anzahl der Tage die wir
zurückgehen können, steuern wir über die for-Schleife. Die fettgedruckte
4 ist dann einfach durch einen höheren bzw. niedrigeren Wert zu
ersetzen.
|
ANZAHL=4; let
COUNT=$ANZAHL-2; for i in `seq 0 $COUNT`; do let c=$COUNT-$i; let
d=$COUNT+1-$i; mv -f html.daily.$c.tar.gz html.daily.$d.tar.gz 2>
/dev/null; done; cd ~/html; tar czf ~/files/html.daily.0.tar.gz * |
|
In diesem Falle haben wir dann in html.daily.0.tar.gz unser frischestes
Backup in html.daily.3.tar.gz das von vor 4 Tagen.
Ähnlich verfahren wir nun mit den Datenbanken:
ANZAHL=4;
let COUNT=$ANZAHL-2; for i in `seq 0 $COUNT`; do let c=$COUNT-$i; let
d=$COUNT+1-$i; mv -f mysql.daily.$c.tar.gz mysql.daily.$d.tar.gz 2>
/dev/null; done; PASSWORD="PASSWORT";
USER=`whoami`; DBS=`mysql -u $USER -p$PASSWORD -B -e "SHOW DATABASES" |
grep $USER`; PARAM="-cf"; cd ~/files/; for db in $DBS; do mysqldump -u
$USER -p$PASSWORD -B -n --add-drop-table $db
> $db; tar $PARAM mysql.daily.0.tar $db; rm $db; PARAM="-rf"; done;
gzip mysql.daily.0.tar |
Um nun zusätzlich auch noch wöchentliche oder monatliche Backups zu
erstellen, richten wir weitere Cronjobs ein. Die Zeiten und Befehle für
ein wöchentliches Backup mit Rotation über 4 Wochen jeweils am Sonntag
sind wie unten anzugeben. Der Cronjob sollte eine Minute vor dem
nächsten Backup ausgeführt werden, damit es keine Überschneidungen gibt.
Das Backup wird so eigentlich am Sonnabend um 23 Uhr 59 ausgeführt:
Minute: 59
Stunde: 23
Tag im Monat: *
Monat: *
Wochentag: 6
Wir können die Tagesbackups dafür natürlich wiederverwerten und kopieren
einfach:
ANZAHL=4; let
COUNT=$ANZAHL-2; for i in `seq 0 $COUNT`; do let c=$COUNT-$i; let
d=$COUNT+1-$i; mv -f html.weekly.$c.tar.gz html.weekly.$d.tar.gz 2>
/dev/null; done; cp -f ~/files/html.daily.0.tar.gz
~/files/html.weekly.0.tar.gz |
In diesem Falle haben wir dann in html.weekly.0.tar.gz unser frischestes
wöchentliches Backup in html.weekly.3.tar.gz das von vor 4 Wochen.
Das gleiche für die Datenbanken:
ANZAHL=4; let
COUNT=$ANZAHL-2; for i in `seq 0 $COUNT`; do let c=$COUNT-$i; let
d=$COUNT+1-$i; mv -f mysql.weekly.$c.tar.gz mysql.weekly.$d.tar.gz 2>
/dev/null; done; cp -f ~/files/mysql.daily.0.tar.gz
~/files/mysql.weekly.0.tar.gz |
Auch das monatlich Backup ist damit kein Problem mehr. Jeweils zum 1.
des Monats. Die Backups werden in diesem Beispiel 6 Monate vorgehalten:
Minute: 59
Stunde: 23
Tag im Monat: 1
Monat: *
Wochentag: *
ANZAHL=6; let
COUNT=$ANZAHL-2; for i in `seq 0 $COUNT`; do let c=$COUNT-$i; let
d=$COUNT+1-$i; mv -f html.monthly.$c.tar.gz html.monthly.$d.tar.gz 2>
/dev/null; done; cp -f ~/files/html.daily.0.tar.gz
~/files/html.monthly.0.tar.gz |
ANZAHL=6; let
COUNT=$ANZAHL-2; for i in `seq 0 $COUNT`; do let c=$COUNT-$i; let
d=$COUNT+1-$i; mv -f mysql.monthly.$c.tar.gz mysql.monthly.$d.tar.gz
2> /dev/null; done; cp -f ~/files/mysql.daily.0.tar.gz
~/files/mysql.monthly.0.tar.gz |
3. Backup des Home-Verzeichnis und der Datenbank mit Rotation
in einem Shellscript
Die Befehlsfolgen sind ziemlich komplex und
unübersichtlich. Es bietet sich daher an, das ganze in einem Shellscript
zu platzieren. Als Cronjob-Befehl ist dann lediglich der Pfad zum
Script anzugeben.
Das Script könnte dann in etwa so aussehen:
#!/bin/bash let COUNT=$ANZAHL_D-2; # MySQL let COUNT=$ANZAHL_D-2; USER=`whoami`; --add-drop-table $db > $db;
let COUNT=$ANZAHL_W-2; mv -f mysql.weekly.$c.tar.gz
mysql.weekly.$d.tar.gz 2> /dev/null; done; cp -f ~/files/html.daily.0.tar.gz
~/files/html.weekly.0.tar.gz cp -f ~/files/mysql.daily.0.tar.gz
~/files/mysql.weekly.0.tar.gz fi DAY_MONTH=`date +%e` let COUNT=$ANZAHL_M-2; mv -f mysql.monthly.$c.tar.gz
mysql.monthly.$d.tar.gz 2> /dev/null; done; cp -f ~/files/html.daily.0.tar.gz
~/files/html.monthly.0.tar.gz cp -f ~/files/mysql.daily.0.tar.gz
~/files/mysql.monthly.0.tar.gz fi |
Dieses Script fügen Sie bitte in einem Editor Ihrer Wahl ein. Speichern
Sie die Datei wenn es geht im Unix-Format unter backup.sh ab, und laden
Sie diese per FTP im Binärmodus in den Ordner files hoch. Führen Sie
anschliessend ein chmod auf 700 aus. Als Cronjob können Sie nun
folgendes angeben:
Minute: 0
Stunde: 0
Tag im Monat: *
Monat: *
Wochentag: *
Befehl:
~/files/backup.sh 2>
/dev/null > /dev/null |
Die Pipes auf /dev/null unterdrücken dabei lediglich die Ausgabe.
Das Skript kann nach Belieben erweitert werden. Bspw. kann ein Upload
per FTP auf einen anderen Server eingerichtet werden. Dafür erstellen
wir eine Datei .netrc, die eigentlich ins Home-Verzeichnis gehört.
Confixx verbietet uns das, und wir müssen kurzzeitig auf den
files-Ordner ausweichen.
Folgender Anhang an das Skript organisiert den
Upload des täglichen Backups auf einen anderen FTP-Server in das
Verzeichnis backup:
FTP_HOST="serverx.domain.de"
ftp $FTP_HOST <<EOF |
Mit dem Skript lässt sich experimentieren. Achten Sie jedoch auf Ihren
Speicherplatz. Dieser sollte genug Platz für das Backup bieten.
Kalkulieren Sie also auch Anzahl und Frequenz der Backups.