Dieser Artikel erschien ursprünglich in meinem ersten Weblog das Netzbuch, das von Mai 2002 bis November 2006 aktiv war, und wurde hier aus blognostalgischen Gründen archiviert. Aktuellere Artikel hat der Uninformat im Angebot.
Webworking Perennen

Lebenshilfe: Backup-Strategie für das Weblog

Die Geschichte mit den Strato-“Backups” hat es mal wieder gezeigt: Es ist ein Spiel mit dem Feuer die Daten auf einem gemieteten Webspace nicht regelmäßig zu sichern, wenn es mal schief geht sind Monate oder Jahre des Bloggens einfach im Daten-Nirwana verschwunden. Darum: Daten sichern! Daten sichern! Daten sichern! Die Schwierigkeit dabei: Eine MySQL-Datenbank (entgegen anderslautenden Meinungen ist MySQL sehr zuverlässig, bei meinem Arbeitgeber habe ich fast die gesamte interne Verwaltung in MySQL-Datenbanken laufen, und es gab in über zwei Jahren nicht einen Datensatz der verloren ging, die zuverlässigste Datenbank nützt aber nichts wenn der Rechner drumherum wie bei Strato ein Saustall ist), wie sie viele Weblogsysteme einsetzen, kann man nicht per ftp auf den eigenen Rechner ziehen, sondern muß die Daten extrahieren und dann an dem berühmten “sicheren Ort” lagern.


Eine entsprechende Ausstattung des gemieteten Accounts erleichtert die Sache dergestalt dass man die Datensicherung völlig automatisieren kann. Je billiger der Webspace, desto mehr Handarbeit kann notwendig sein. Wie man die Datensicherung am geschicktesten anstellt kann die verehrte Zielgruppe in einem Netzbuch-Karfreitag-Special erfahren indem sie einmal behände auf Mehr klickt …

Luxus-Account: Cronjob verschickt Mail mit komprimierter Datenbank


Die folgende Vorgehensweise funktioniert wenn man Shell-Zugriff auf seinen Webspace hat. Bevor etwaige Nörgler rumnöhlen “ey, dat kann man aber alles in eine Zeile packen”, weiß ich, aber ich habe das bewusst einfach gehalten damit es durchsichtig bleibt.


Wenn man Shell-Zugriff per ssh oder telnet (sofort den Hoster wechseln, kein verantwortungsvoller Hoster bietet telnet an) hat ist es ganz einfach. Wir benötigen “mpack” um eine Mail mit Anhang zu erstellen, darum probieren wir nach dem Login durch ein beherztes “mpack” auf der Kommandozeile einmal aus ob das vorhanden ist. Wenn die Antwort etwa “An input file must be specified” lautet, wunderbar. Lautet die Antwort “bash: mpack: command not found” dann muß man die “Nicht ganz der Luxus-Account”-Methode (s.u.) verwenden.


Mit einem Editor der Wahl erzeugt man nun in seinem home-Verzeichnis das folgende kleine Shellskript mit dem Namen db-backup.sh:

<br />#!/bin/sh <br />mysqldump --user=DB-BENUTZER --password=DB-PASSWORT NAME-DATENBANK > NAME-DATENBANK.sql <br />gzip NAME-DATENBANK.sql <br />mpack -s Backup NAME-DATENBANK.sql.gz DEINE_EMAILADRESSE <br />rm -f NAME-DATENBANK.sql.gz <br />

Für DB-BENUTZER tragt Ihr den Benutzernamen für Eure Datenbank ein, für DB-PASSWORT das Passwort, für NAME-DATENBANK überraschenderweise den Namen der Datenbank und für DEINE_EMAILADRESSE Eure Email-Adresse. Nach dem Speichern verändert Ihr noch die Rechte des kleinen Skriptes mit

chmod 700 db-backup.sh, das Skript ist nun ausführbar und außer Euch kann niemand das Passwort für die Datenbank lesen.


Nun testen wir einmal, auf der Shell einmal ~/db-backup.sh eintippen, und kurze Zeit später erhaltet Ihr eine Email welche die Datenbank als komprimierten Dateianhang enthält.

Da das Ganze ja automatisch ablaufen soll erstellen wir nun noch einen Cronjob, der bewirkt dass das Skript zu von uns definierten Zeitpunkten automatisch ausgeführt wird und uns die Datenbank selbstständig nach Hause sendet. Dazu müssen wir noch den genauen Pfad zum “home”-Verzeichnis wissen, ein locker eingetipptes (immer auf der shell) “set|grep HOME” liefert als Ergebnis etwas wie “HOME=/home/irgendwo/juppi23” als Ergebnis. Jetzt wird es ein wenig kompliziert, aber ist für uns auch kein Problem. ;-) Mit “crontab -e” öffnen wir einen Editor, meistens der etwas exzentrisch zu bedienende vi. Jetzt nicht einfach lostippen! Mit einem “i” wechseln wir in den Bearbeitungsmodus und erstellen eine neue Zeile. Es muß definiert werden wie oft unser Skript laufen soll, im Editor muß eine Zeile nach dem Schema “MINUTE STUNDE TAG_DES_MONATS MONAT WOCHENTAG auszuführendes_Programm” erzeugt werden. Ein “” steht dabei für beliebig. Wir tippen nun “ 3 * * * /home/irgendwo/juppi23/db-backup.sh” (natürlich müssen wir den eben ermittelten Pfad zu unserem Home-Verzeichnis verwenden) ein, mit einem Druck auf die ESCAPE-Taste gefolgt von “:wq” sichern wir den Cronjob. Nun wird jeden Tag um 3:00 Uhr automatisch ein Backup der Datenbank erstellt und per Mail verschickt. Würde man z.B. “* 3 * * sun /home/irgendwo/juppi23/db-backup.sh” eintippen entsprechend nur Sonntags um 3:00 Uhr. Das war es schon, wir brauchen nichts mehr zu tun, das Datenbank-Backup unseres Weblogs trudelt von nun an automatisch in unsere Mailbox. Was wir dann im Falles des Falles damit anstellen wird weiter unten erläutert!


Nicht ganz der Luxus-Account: Cronjob verschickt Mail mit unkomprimierter Datenbank



Wenn kein “mpack” vorhanden ist müssen wir das Skript ein wenig modifizieren. Es bleibt uns nichts anderes übrig als den Inhalt der Datenbank als Text zu versenden, was die Mail ein wenig umfangreich machen kann. Das db-backup.sh-Skript lautet dann in diesem Fall:

<br />#!/bin/sh <br />mysqldump --user=DB-BENUTZER --password=DB-PASSWORT NAME-DATENBANK > NAME-DATENBANK.sql <br />mail -s "Backup" DEINE_EMAILADRESSE < NAME-DATENBANK.sql <br />rm -f NAME-DATENBANK.sql <br />

Die weitere Vorgehensweise ist identisch mit der oben beschriebenen. Die Datenbank wird als Inhalt der Mail (im Klartext) versendet, wenn wir das Backup dann einmal benötigen müssen wir wohl oder übel den Mailtext als Datei speichern und dann wie unten erläutert zurückspielen.


Voll der Billigheimer: Backup ohne Shell-Zugriff mit phpMyAdmin



So ein Cronjob ist ja schön und gut, aber viele benutzen ja 1,98 Euro-Accounts die nur ftp-Zugriff gestatten. Aber auch in dem Fall kann man regelmäßig sichern, es ist dann nur mit mehr Arbeit verbunden.

Zunächst einmal muß auf dem Server phpMyAdmin installiert sein. Das ist nicht weiter schwierig. Wir laden uns von der phpMyAdmin-Homepage die Datei hinter dem Link “Download phpMyAdmin-2.4.0-php.zip” (oder welche Version auch immer gerade aktuell ist) herunter und entpacken dieses Zipfile irgendwo auf unserem Rechner. Es entsteht dann ein Verzeichnis namens “phpMyAdmin-2.4.0” (oder so ähnlich), das können wir nun auf “phpMyAdmin” umbenennen. In diesem Verzeichnis steckt eine Datei “config.inc.php”, diese öffnen wir mit einem Texteditor und ändern drei Zeilen:

$cfg[`PmaAbsoluteUri`] = `http://deine.domain.wieauchimmer/phpMyAdmin/`;

Und weiter unten:

<br />// MySQL USERNAME <br />// This is the username you use to access your MySQL database. <br />// Note: This is usually NOT the same as your FTP username. <br /> $dbusername = "DB-BENUTZERNAME"; <br /> <br />// MySQL PASSWORD <br />// The password used to access your MySQL database. <br />// Note: This is usually NOT the same as your FTP password. <br /> $dbpassword = "DB-PASSWORT"; <br />

DB-BENUTZERNAME und DB-PASSWORT werden natürlich durch die entsprechenden Werte ersetzt. Das war es schon, nun werfen wir unser ftp-Programm an und laden den gesamten Verzeichnisbaum “phpMyAdmin” auf unseren Webspace hoch. Wenn das fertig ist öffnen wir den Browser unseres Vertrauens und tippen “http://deine.domain.wieauchimmer/phpMyAdmin/” (oder wie immer wir das Verzeichnis auch benannt haben). Links oben finden wir nun ein Auswahlfeld oder den Namen “der” Datenbank, je nach Preis des Webhosters. Ein Klick auf den Namen der Datenbank öffnet im rechten Bereich eine Ansicht die etwa so wie der folgende Screenshot aussehen sollte:

Screenshot


Wir klicken nun auf “Exportieren” (rote Ellipse auf dem Screenshot) und es öffnet sich eine neue Ansicht:

Screenshot


Die Felder klicken wir so an wie auf dem Screenshot zu sehen und klicken auf “OK”, ein Download-Fenster öffnet sich und wir können uns auf unserer Festplatte einen sicheren Ort suchen. Je nach Browser kann es sein dass ein Dateiname der Art “DATENBANK.sql.php” angeboten wird, das sollten wir dann nach dem Download in “DATENBANK.sql” umbenennen.

Tipp: Die Seite für den Daten-Download in phpMyAdmin kann man sich auch direkt “bookmarken”, dann geht es schneller, indem man den Link “Exportieren” mit der rechte Maustaste und “Öffnen in neuem Fenster” (oder so ähnlich) anklickt.

Man sollte das “phpMyAdmin”-Verzeichnis durch eine Zugriffsschutz per .htaccess sichern, wie das geht findet Ihr (hoffentlich) in der Doku Eures Providers.


Katastrophe: Alles weg, das Backup muß her!



Nun ist es also passiert, der Provider hat Eure Datenbank zerstört und Ihr wollt das Backup wieder auf dem Server einspielen. auch dafür gibt es wieder zwei Wege.

Auf der Shell

Zunächst spielt Ihr die Datei mit dem letzten Backup per ftp in Euer Home-Verzeichnis auf den Server. Sodann loggt Ihr Euch per ssh ein und wechselt in das Home-Verzeichnis. Handelt es sich um eine komprimierte Datei nach dem ersten Backup-Verfahren dann muß diese mit einem “gzip d DATENBANKNAME.sql.gz” (wobei DATENBANKNAME durch Euren Datenbanknamen ersetzt werden muß) entpackt werden. Handelt es sich um eine nach dem zweiten oder dritten Verfahren erstellte Textdatei braucht Ihr nichts machen außer den Namen der Datei im Kopf zu behalten. ;) Nun loggt Ihr Euch auf der Shell mit “mysql —user=DB-BENUTZERNAME —password=DB_PASSWORD” in mysql ein. Ihr landet auf der mysql-Kommandozeile, mit “use DATENBANKNAME;” landet Ihr in Eurer leeren Datenbank. Die leere Datenbank sollte vorhanden sein, ist diese “weg” und Ihr habt das Recht Datenbanken selbst anzulegen müsst Ihr die Datenbank mit “create database DATENBANKNAME;” erzeugen und dann mit “use DATENBANKNAME;” hineinwechseln. Jetzt tippt Ihr, immer noch auf der mysql-Kommandozeile, ein “. DATENBANK.sql” ein (oder wie immer Eure unkomprimierte Sicherungsdatei heisst). Mysql rödelt nun ein bißchen herum und wenn er fertig ist ist sie wieder da, die kostbare Datenbank. Das war`s, mit “quit” verlasst Ihr mysql und könnt wieder bloggen. :-)


Ohne Shell: phpMyAdmin

Ohne Shell müssen wir wieder phpMyAdmin zu Hilfe nehmen, also Browser öffnen und “http://deine.domain.wieauchimmer/phpMyAdmin/” eintippen. Auch hier gilt: Ist die Datenbank verschwunden muß sie erst auf der Startseite von phpMyAdmin leer angelegt werden (und nur dann):

Screenshot


Mit einem Klick auf die Datenbankauswahl oder den Namen der Datenbank (wenn es nur eine gibt) kommt Ihr in die folgende Ansicht:

Screenshot


Hier klickt Ihr nun auf “SQL”, es erscheint folgendes:

Screenshot


Ein Kick auf Durchsuchen öffnet ein Dateiauswahlfenster, hier wählt Ihr nun Eure (unkomprimierte) Sicherungsdatei aus und klickt auf “OK”, dann wird phpMyAdmin ein bißchen rödeln und die Datenbank wieder herstellen. Alles ist nun gut, es kann weiter gebloggt werden.


Schlußwort



Soweit das “Karfreitag-Special”, ich hoffe dass hilft jemandem. Wenn auch nur ein liebevoll geführtes Blog durch diese Anleitung vor dem “Datentod” gerettet werden kann dann hat sie ihren Sinn erfüllt. Und dran denken: Die hier beschriebenen Verfahren sichern die Datenbank, selbstverständlich solltet Ihr auch all` Eure Bilder, HTML- und PHP-Dokumente vom Webserver mit einem ftp-Programm nach jeder Änderung auf Eure Festplatte ziehen nur diese Dateien gemeinsam mit der Datenbank sichern Eurer Weblog. Nun kann der Provider machen was er will, Eure mühsame Arbeit ist gerettet. ;-)