Grexsoft Corporation

GrexGuides v0.1 Beta

Rootserver Back Up

Das Backup des eigenen Rootserver ist das A und O des Sicherheits ABCs eines Administrators. Aus diesem einfachen Grund werde ich in dem folgenden How-To beschreiben wie man mehrere Verzeichnisse und sogar MySQL Datenbanken einfach und zuverlässig sichern kann. Dabei werden die einzelnen Backups jeweils inkrementell gesichert und per Hardlink gespeichert.

Zeitaufwand: ca. 20 Minuten
Bitte zuerst das ganze Dokument lesen und dann erst anfangen :)

1. Installation

Wir brauchen zuerst einmal rsnapshopt, das ist ein Programm das uns (fast) die ganze Arbeit abnimmt. Installieren auf Debian / Ubuntu Systemen ist kein Problem:
apt-get install rsnapshot

Auf anderen System muss man sich entweder den entsprechenden Packetmanager benutzen, oder sich die Sourcen besorgen und das Programm selbst kompilieren.

2. Planung

Erst mal überlegen wir uns was wir alles sichern wollen, bei mir ist das:

1. /etc – alle Konfigurationsdateien, also schonmal sehr wichtig :)
2. /var/mail – alle Emails des Systems und der virtuellen Benutzer
3. /var/www – meine Webauftritte
4. /home – wichtige Dateien von lokalen Usern
5. Alle MySQL Datenbanken

Außerdem überlegen wir uns noch, wie oft wir die jeweiligen Verzeichnisse sichern wollen und wieviele Backups wir davon behalten wollen. Dabei ist wichtig zu überlegen, was sinnvoll ist, da jedes zusätzliches Backup Ressourcen wie CPU und Speicherplatz kostet, aber jedes Backup zu wenig noch schlechter ist.

Ich entschied mich für folgende Einteilung:

/etc – wöchentlich & monatlich
/var/mail – täglich, wöchentlich & monatlich
/var/www – wöchentlich & monatlich
Mysql Daten – täglich, wöchentlich & monatlich

Das bedeutet, dass wir die Daten, die wir wöchentlich und monatlich speicherm, insgesamt 10x speichern, nämlich jede Woche bis der Monat voll ist (4x) und dann noch jeden Monat, bis die Daten ein halbes Jahr alt sind (6 Monate).
Bei den MySQL Daten und den Mails haben wir sogar noch größere Datenbestände, den zu den 10 Sätzen, kommen noch einmal 7 Stück dazu, einer für jeden Wochentag.

3. User erstellen

Das rotieren und alles weitere übernimmt für uns hier alles rsnapshot. Wir müssen uns also um praktisch nicht kümmern, aber wir brauchen noch einen User der unsere Backups verwaltet und erstellt. man kann dazu einfach root verwenden, aber am besten man erstellt sich einen neuen User (z.B. “rsnapshot”).

useradd -d /home/rsnapshot rsnapshot
sudo passwd rsnapshot

4. Sudoers anpassen

Jetzt bearbeiten wir die /etc/sudoers so dass unser User rsnapshot mit Rootrechten ausführen kann (sudo visudo).

rsnapshot ALL = NOPASSWD:/usr/bin/rsync, /usr/bin/rsnapshot

Nun sollte der Benutzer rsnapshot mit Rootrechten ausführen können, ohen ein Passwort eingeben zu müssen, was z.b. wichtig ist wenn per Cronjob und SSH gesichert werden soll.

5. Konfiguration

Jetzt in /etc/rsnapshot.conf die betreffenden Zeilen ändern:

###########################
# SNAPSHOT ROOT DIRECTORY #
###########################

snapshot_root /home/rsnapshot/

#########################################
# BACKUP INTERVALS #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc. #
#########################################

# The interval names (hourly, daily, …) are just names and have no influence
# on the length of the interval. The numbers set the number of snapshots to
# keep for each interval (hourly.0, hourly.1, …).
# The length of the interval is set by the time between two executions of
# rsnapshot , this is normally done via cron.
# Feel free to adapt the names, and the sample cron file under /etc/cron.d/rsnapshot
# to your needs. The only requirement is that the intervals must be listed
# in ascending order. To activate just uncomment the entries.

interval daily 8
interval weekly 5
interval monthly 7

###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# LOCALHOST
backup /home/ localhost/
backup /etc/ localhost/
backup /var/www/ localhost/
backup /var/mail/ localhost/
backup_script /home/rsnapshot/mysql.sh localhost/mysql/

Bitte beachten das die letzte Zeile meiner Konfiguration kein Verzeichnis direkt sichert, sondern ein Script ausführt und dessen Ausgabe dann sichert. Das Script sichert hier alle meine MySQL Datenbanken und zu haben ist es hier. Einfach in /home/rsnapshot/mysql.sh speichern und als Owner “rsnapshot” eintragen und die Rechte auf 700 setzen.

6. Testen

Jetzt können wir schon ein wenig testen. Zuerst lassen wir uns alle Befehle anzeigen die ausgeführt wurden und dann beginnen wir mit unserem ersten Backup, das auch ein wenig dauern kann, je nachdem wieviel man sichern möchte.

sudo -u rsnapshot -H sudo rsnaphot -t daily
sudo -u rsnapshot -H sudo rsnaphot daily

7. Als Cronjob eintragen

Wenn jetzt alles funkioniert hat, ist das Backup erst mal fertig. Jetzt muss man das ganze noch als Cronjob eintragen. Dazu einfach mal
sudo -u rsnapshot -H crontab -e

aufrufen, was einen neuen Crontab für den User “rsnapshot” anlegt. In diesen Crontab werfen wir jetzt unsere daily, weekly und monthly Befehle:

#m h dom mon dow command
0 4 * * * sudo rsnapshot daily
30 4 * * 0 sudo rsnapshot weekly
30 4 1 * * sudo rsnapshot weekly
0 5 1 * * sudo rsnapshot monthly

So sieht bei mit mein Crontab aus, das bedeutet, dass um 4:00 Uhr jeden Tag das tägliche Backup gesichert wird. 30 Minuten später dann, wenn Sonntag ist auch das wöchentliche Backup und nochmal 30 Minuten später das monatliche Backup wenn der erste des Monats ist.

Soweit sollte unser Backup System jetzt fertig sein. Ich kann allerdings weder für die Richtigkeit, noch die Zuverlässigkeit dieses Tutorials garantieren und übernehme keinerlei Haftung für zerstörte oder nicht gesicherte Daten! Bei mir funktioniert diese Konfiguration aber wunderbar.
Wer will kann sich auch noch das letze Kapitel anschauen, ansonsten viel Spaß und Erfolg :) Kritik und Verbesserungsvorschläge sind ausdrücklich erwünscht! Einfach ein Kommentar schreiben, sollte einem das Tutorial geholfen haben oder man hat einen bessere Vorschlag!

Aehmm das war es erst mal ;)

September 17, 2007 Verfasst von grexx | Sonstiges | | Noch keine Kommentare