Wenn man einen Web-, V- oder Rootserver sein eigen nennt, dann sollte man sich auch immer gedanken über Backups machen. Wer kennt nicht die Horror-Geschichten aus diversen Foren in denen vom kompletten Datenverlust auf dem Web-, V-, oder Rootserver berichtet wird. Die allermeisten werden als Antwort erhalten “spiel das Backup” ein, nur wenn man nie ein Backup durchgeführt hat sind die Daten nicht mehr zu retten.
Die allermeisten Serveranbieter stellen zusätzlich zu dem Server ein FTP-Backup-Verzeichnis zur Verfügung. Unter Ubuntu gibt es ein sehr einfaches und schönes Paket welches Backups auf ein FTP-Verzeichnis übertragt. Der Name des Pakets ist “duplicity”.
Zu Beginn logt man sich über ein SSH Terminal als “root” auf den Server ein.
ssh root@[MeineServerAdresse]
Wenn man sich erfolgreich als “root” angemeldet hat legt man zunächst einen neuen Benutzer an. Für dieses Tutorial nennen wir den Benutzer “backupuser”.
Um sich später auch als “backupuser” per SSH anmelden zu können muss der neue Benutzer noch ein Passwort erhalten, dies wird mit folgendem Befehl durchgeführt.
Das neue Passwort muss zweimal hintereinander eingeben werden.
Nachdem der Benutzer angelegt wurde, muss nun das Backup-Programm “duplicity” installiert werden. Die Installation gestaltet sich unter Ubuntu wie bekannt sehr einfach mittels “apt-get”
apt-get install duplicity
Manchmal ist es notwendig noch das Programm “ncftp” zu installieren.
Der Benutzer “backupuser” muss nun noch Zugriffsrechte für “duplicity” erhalten. Dazu begibt man sich in die Datei “/etc/sudoers” . Die Datei “/etc/sudoers” öffnet man mit dem Befehl.
Im Editor fügt man nun folgende Zeile hinzu.
backupuser ALL=(root)NOPASSWD:/usr/bin/duplicity
Nun sind alle Vorbereitungen mit dem Benutzer “root” abgeschlossen. Man kann jetzt die SSH-Verbindung trennen.
Anschließend baut man eine SSH-Verbindung mit dem Benutzer “backupuser” auf.
ssh backupuser@[MeineServerAdresse]
Um das Backup möglichst komfortabel zu gestalten, erstellt man ein Konsolen-Script. Man legt im home Verzeichnis des “backupuser” (“/home/backupuser”) mit dem Editor seiner Wahl (hier “vi”) die Datei “backup.sh” an.
Im Editor gibt man Folgendes ein.
export PASSPHRASE=[PasswortDesBackups]
export FTP_PASSWORD=[PasswortDesFTPSersers]
duplicity /home/backupuser/foo ftp://[FTPBenutzer]@[FTPServerAdresse]/foo
unset PASSPHRASE
unset FTP_PASSWORD
In dem vorangegangenen Konsolen-Script wird das Verzeichnis “/home/backupuser/foo” auf dem FTP-Server unter “/foo” gespeichert. Die Datei muss nun noch ausführbar gemacht werden, dies geschieht durch den Befehl.
Ein Backup ist nur sinnvoll, wenn es in gewissen Abständen immer wieder durchgeführt wird. Dafür wird ein sogenannter Cron-Job installiert. Cron-Jobs eines Benutzers werden in der “crontab” hinterlegt. Um die crontab-Datei mit seinem bevorzugten Editor zu öffnen, (z.B. “vi”) gibt man den folgenden Befehl ein.
EDITOR="vi"; export EDITOR
In die “crontab” gelangt man durch:
In die geöffnete Datei gibt man Folgendes ein.
0 3 * * * sh /home/backupuser/backup.sh
Das Backup des Ordners wird von nun an täglich um 3.00 Uhr durchgeführt. Die genauen Einstellungen des Cron-Jobs können unter folgender Adresse http://wiki.ubuntuusers.de/Cron eingesehen werden.
Um eine MySQL-Datenbank über FTP zu sichern, muss das Programm “mysqldump” hinzugezogen werden. Als “root” begibt man sich wieder in die Datei “/etc/sudoers” und fügt die folgende Zeile hinzu.
backupuser ALL=(root)NOPASSWD:/usr/bin/mysqldump
Anschließend muss der Benutzer “backupuser” MySQL hinzugefügt werden. Man kann dies über eine Web-Oberfläche bewerkstelligen oder direkt über die Konsole (der Konsolen Benutzer muss alle Rechte von MySQL besitzen). Über die Konsole startet man zuerst den MySQL-Client “mysql”.
mysql --password="[PasswortDesMySQLBenutzers]"
Um den Benutzer “backupuser” innerhalb von “mysql” anzulegen, gibt man Folgendes ein.
mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY '[PasswortVonBackupuser]';
Um “backupuser” nun alle Rechte in MySQL zu gewähren, gibt man den folgenden Befehl ein.
mysql> GRANT ALL PRIVILEGES ON * . * TO 'backupuser'@'localhost' IDENTIFIED BY '[PasswortVonBackupuser]' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Nun kann man die SSH-Verbindung wieder trennen und mit “backupuser” wieder aufbauen. Anschließend wird die Datei “backup.sh” wieder geöffnet und etwas modifiziert, um auch die MySQL-Datenbank zu sichern.
# neu
mysqldump -p --user="backupuser" --password="[PasswortVonBackupuser]" [DatenbankName] > /home/backupuser/mysql/[DatenbankName].dump
export PASSPHRASE=[PasswortDesBackups]
export FTP_PASSWORD=[PasswortDesFTPSersers]
duplicity /home/backupuser/foo ftp://[FTPBenutzer]@[FTPServerAdresse]/foo
# neu
duplicity /home/backupuser/mysql ftp://[FTPBenutzer]@[FTPServerAdresse]/mysql
unset PASSPHRASE
unset FTP_PASSWORD
über “mysqldump” wird die gewünschte Datenbank in das Verzeichnis “/home/backupuser/mysql” kopiert und auf dem FTP-Server unter “/mysql” gesichert.
Beim ersten Durchlauf des Backups werden die gesamten eingebenen Daten gesichert. Bei jedem weiteren Durchlauf wird nur die Datendifferenz hinterlegt. Nach einiger Zeit kann es sehr lange dauern, bis die Differenz kalkuliert ist. Deswegen ist es sinnvoll alte Datenbestände zu löschen. Hierzu modifiziert man ein weiters mal das Konsolen-Script “backup.sh”.
mysqldump -p --user="backupuser" --password="[PasswortVonBackupuser]" [DatenbankName] > /home/backupuser/mysql/[DatenbankName].dump
export PASSPHRASE=[PasswortDesBackups]
export FTP_PASSWORD=[PasswortDesFTPSersers]
duplicity /home/backupuser/foo ftp://[FTPBenutzer]@[FTPServerAdresse]/foo
duplicity /home/backupuser/mysql ftp://[FTPBenutzer]@[FTPServerAdresse]/mysql
#neu
duplicity remove-older-than 1M --force ftp://[FTPBenutzer]@[FTPServerAdresse]/foo
duplicity remove-older-than 1M --force ftp://[FTPBenutzer]@[FTPServerAdresse]/mysql
unset PASSPHRASE
unset FTP_PASSWORD
Der Parameter “1M” steht für einen Monat. Im Folgenden sind die weiteren möglichen Parameter aufgelistet.
s = Sekunde
m = Minute
h = Stunde
D = Tag
W = Woche
M = Monat
Y = Jahr
“Niemand will Backup. Alle wollen Restore.” (Kristian Köhntopp zitiert einen Vertriebler)
Nun kommt der Abschnitt, den hoffentlich niemand je ausführen muss, der Restore. Der Restore gestaltet sich genauso simpel wie das Backup. Für den Restore erstellt man abermals ein Konsolen-Script und gibt Folgendes ein.
export PASSPHRASE=[PasswortDesBackups]
export FTP_PASSWORD=[PasswortDesFTPSersers]
duplicity --file-to-restore /foo ftp://[FTPBenutzer]@[FTPServerAdresse]/ /home/backupuser/
unset PASSPHRASE
unset FTP_PASSWORD
Hierbei wird das Verzeichnis “/foo” des FTP-Backup-Verzeichnisses in den das Verzeichnis “/home/backupuser” geschrieben. Mit dem MySQL-Backup funktioniert dies genau gleich. Um das MySQL-Dump wieder in MySQL zu überspielen gibt man den folgenden Befehl ein.
mysql -p --database=[DatenbankName] --password="[PasswortVonBackupuser]" < [DatenbankName].dump
Ich hoffe ich konnte mit diesem Tutorial manchem helfen seinen Server mit einem Backup zu versehen. Anregungen und Vorschläge können gerne in die Kommentare geschrieben werden.
Quellen:
Ubuntuusers zu Cron: http://wiki.ubuntuusers.de/Cron
Ubuntu.com zu duplicity: https://help.ubuntu.com/community/DuplicityBackupHowto
Manpage von mysql: http://www.manpagez.com/man/1/mysql/
Manpage von mysqldump: http://www.manpagez.com/man/1/mysqldump/
Manpage von duplicity: http://duplicity.nongnu.org/duplicity.1.html
Manpage von vi: http://enciclopedia.galeon.com/vi.html

Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung-Nicht-kommerziell 3.0 Unported Lizenz.
Wenn man einen Web-, V- oder Rootserver sein eigen nennt, dann sollte man sich auch immer gedanken über Backups machen. Wer kennt nicht die Horror-Geschichten aus diversen Foren in denen vom kompletten Datenverlust auf dem Web-, V-, oder Rootserver berichtet wird. Die allermeisten werden als Antwort erhalten "spiel das Backup" ein, nur wenn man ...