Auch Entwickler brauchen Platz zum Spielen

23. März 2009 /

Backup für WordPress: Erinnerung an die vergessene Initiative

Mit einer Backup-Woche hatte WordPress Deutschland vor 2 Jahren eine sinnvolle Initiative ins Leben gerufen, die naive und unerfahrene Anwender (nicht nur Anfänger) auf die Relevanz und Unabdingbarkeit einer Sicherung der Blogdaten hinweisen und verfügbare Techniken aufzeigen sollte. Im Verlauf der Jahre wurde die begleitende Website Pro-Backup eingestellt. Dieser Beitrag holt die verstaubte Idee im Gedächtnis der Blogger auf die Vorderplätze. Mit Backup-Script.

Backup-Woche ist jede Woche
Eins steht fest: Jedes digitale Dokument benötigt eine Kopie, die als Sicherung angelegt und im separaten „Raum“ aufbewahrt wird. Das Duplikat ist eine Art Lebensversicherung mit vom Inhalt abhängigem Wert. Im Ernstfall springt das – brav zur Seite gelegte – Backup ein, ersetzt korrupte Dateien und bringt diese kompromisslos und verlustfrei auf den aktuellsten Stand der Dinge. Ist keine Sicherung vorhanden oder ist diese mit recht veralteten Informationen gefüllt, so hat man als Anwender Pech. Je nach Wichtigkeit der Daten ziemlich viel Pech. Nicht anders ist es bei Blogs mit ihren exquisiten Beiträgen und informativen Kommentaren.

Kein Blog ohne Datenbank-Backup
An dieser Stelle will ich keine Blogger von der Signifikanz des Vorausdenkens überzeugen oder auf die „Warum?“-Gründe tiefer eingehen. Außer Debatte: Bloggen ohne ein funktionierendes Backup-System ist unklug und witzlos. Das soll dieser Artikel in Erinnerung bringen.

Regelmäßiges Backup sichert die Existenz
Regelmäßiges Backup sichert die Existenz

Webhoster, dein Freund und Helfer
Zahlreiche Webhoster stellen ihren Kunden einen entsprechenden Service kostenfrei zur Verfügung, spiegeln nächtlich die Bytes und übernehmen dadurch die lästige Sicherung der angelegten Datenbanktabellen, die notfalls problemlos zurückgespielt werden können. Es empfiehlt sich also beim Webhoster seiner Wahl nachzufragen, ob die Möglichkeit eines automatisierten Backup gegeben ist und genutzt werden kann – mit weniger Aufwand geht ein Backup kaum. Natürlich muss der entgegenkommende Webhoster eine Importfunktion zugänglich machen, um die gespeicherten Kopien auch schnell, unbürokratisch und mit einfachen Mitteln rekonstruieren zu können – bestenfalls per Knopfdruck. Alternativ unterstützen Tools wie phpMyAdmin und MySQLDumper bei der Einspielung der heilen Datensätze aus den SQL-Files.

Auf Datenbanken zugeschnittene Lösungen
Natürlich existieren für WordPress auch brauchbare Plugins mit nützlichen Einstellungen, die benutzerdefinierte DB-Tabellen zuverlässig und auf Wunsch täglich zusammengefasst aufbewahren. Kann die in WordPress hinterlegte Datenbank von außen erreichbar werden (also nicht nur via localhost), steht einem produktiven und äußerst effizienten Einsatz von SQL-Managern nichts im Wege: Eine sekundenschnelle Exportfunktion gehört mit Sicherheit zum Lieferumfang jeder auf eine Datenbank spezialisierten Anwendung und erledigt die gestellte Aufgabe mit Bravour. Nicht unerwähnt bleiben sollte der MySQL Administrator – auch hier können Zeitintervalle für automatische Sicherungsabläufe frei definiert und mit zusätzlichen Optionen ausgestattet werden.

Es gibt also keinen nennenswerten Grund, eigenen Datenbestand nicht duplizieren zu lassen – spätestens eine händische Ausführung soll möglich und machbar sein. Zudem liegt das generierte Backup in komprimierter Form vor, benötigt somit deutlich weniger Platz als der Speicherplatzbedarf der eigentlichen Datenbank.

mySQL Administrator gibt Tabellen aus und liest sie wieder ein
mySQL Administrator gibt Tabellen aus und liest sie nach Bedarf wieder ein

Datenbankdimension: Groß, größer, Problem
Ein eventuelles Problem stellen übergrosse Datenbanken im Megabyte-Bereich dar: Besonders aktive und ältere Blogs mit ihren unzähligen Beiträgen und Kommentaren erreichen mit Leichtigkeit diese magische Grenze und können meist nicht ohne Mühen exportiert werden. Je nach Serverumgebung kann ein Script bzw. eine Anwendung wie z.B. phpMyAdmin lediglich eine vom Administrator eingestellte Zeit lang ausgeführt werden. Zur Erklärung: Ist die zu sichernde Datenmenge zu riesig, kommt es schnell dazu, dass ein Backup nie vollständig erzeugt werden kann, da der zugelassene Ausführungszeitraum schlicht verstrichen ist. Das Ergebnis: Backup ist als Datei entweder gar nicht vorhanden oder mit unvollständigen Daten bestückt – der Schein trübt.

Spätestens bei der nächsten Migration der Datenbank auf einen anderen (besseren?) Webspace fragt man sich als betroffener Blogger, wie überdimensionierte Tabellen samt Inhalt und Struktur ohne viel Tamtam transferiert werden können? Vorzugsweise unterstützen die Webhoster den Endverbraucher: Der alte Provider exportiert die monströse Datenmenge, der Neue restauriert die vorherige Umgebung anhand des Backups. Das wäre ideal und kundenfreundlich.

Andernfalls ist man auf einen Dienstleister oder sich selbst angewiesen. Wird auf dem Server SSH unterstützt, ist eine Sicherungskopie via Konsole schnell erledigt – vorausgesetzt man kennt sich mit der Materie aus. Alternativ beherrscht MySQLDumper einen Export von Tabellen mit großzügig gesammelten Datenmengen, indem es einzelne Blöcke häppchenweise dem Gesamtarchiv hinzufügt und somit die Begrenzung mit vorgegebener Zeit gekonnt umgeht. Wesentlicher Nachteil der Vorgehensweise: Eine Sicherung von mehreren MB kann proportional mehrere Stunden in Anspruch nehmen, was angesichts der Dauer des Prozesses nicht immer in Frage kommt.

mySQL auf der Systemebene backupen lassen
Die eleganteste Methode eine komplette mySQL Datenbank zu sichern, erfolgt mithilfe eines simplen, jedoch durchaus schnellen PHP-Befehls, der seinerseits die Ausführung des Backups auf der mySQL Ebene anstößt und die Ausgabe als komprimierte Datei im Hauptverzeichnis ablegt. Je nach Webhoster kann der – aus Sicherheitsgründen nicht immer freigeschaltete – PHP-Befehl system auch passthru, exec, shell_ exec heißen (bitte erfragen). Die Zugangsdaten gehören entsprechend angepasst.

PHP-Code führt das Backup einer (größeren) Datenbank aus

<?php
system(
  sprintf(
    'mysqldump --opt -h%s -u%s -p"%s" %s | gzip > %s/backup.sql.gz',
    $dbhost,
    $dbuser,
    $dbpwd,
    $dbname,
    getenv('DOCUMENT_ROOT')
  )
);
?>

Bestenfalls entsteht aus den obigen Zeilen eine wiederverwendbare PHP-Datei, die im geschützten Verzeichnis abgelegt und täglich oder öfters (abhängig vom Update-Rhythmus des Blog) zwecks Sicherung der Datenbank aufgerufen wird (Stichwort Cronjob).

Datenbank ist nicht alles
Spricht man das Thema „Backup für WordPress“ an, so wird zwingend an den Klon der Datenbank gedacht. Dabei werden Dateien im wordpress-Verzeichnis außer Acht gelassen und schlicht und einfach vergessen. Obwohl hochgeladene Medien nicht weniger relevant als Datenbankinhalte sind: Ein Verlust hätte ebenfalls katastrophale Folgen. Also gehört der komplette Ordner wp-content weggesichert – samt installierten Plugins, verwendeten Themes und getätigten Uploads.

Empfehlung
Sichert alles. Sichert oft. Sichert jetzt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.