Artikel vom 23. März 2009

Backup für WordPress: Erinnerung an die vergessene Initiative

Datenbank

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!

Nachgefragt
Welche Wege geht ihr für die Sicherung der WordPress-Installationen? Wie oft fertigt ihr Backups an? Welche Daten werden zum festen Bestandteil der erzeugten Sicherung?

Sergej Müller

[Der Autor] Sergej Müller ist enthusiastischer Software Engineer mit Schwerpunkten Webentwicklung und WordPress. Seit 2007 programmiert und vertreibt er wpSEO, das weltberühmte und patentierte SEO-Plugin für WordPress-Blogs.

Social Werkzeuge

18 Kommentare zum Artikel

495 Tage zuvor | #1 FirstDayBlack

OK, hab ich gemacht. :-)

FirstDayBlack
495 Tage zuvor | #2 Sergej Müller

Und schon hat sich gelohnt den Artikel zu schreiben ;)

Sergej
495 Tage zuvor | #3 FirstDayBlack

Magst du nicht ein Plugin coden, dass auf Knopfdruck einen dump zieht und das wp-content-Verzeichnis in einen tarball o.ä. packt?

FirstDayBlack
495 Tage zuvor | #4 Sergej Müller

Wieso wusste ich, das die Frage kommt? Ich bin der Meinung im WordPress.org-Pluginverzeichnis ein ähnliches Plugin gesehen zu haben. Trägt den Namen eFiles Backup.

Sergej
495 Tage zuvor | #5 Olaf

Vielen Dank Sergej! Wir haben auf WPD das Thema direkt aufgegriffen und beschlossen die Initiative wieder aufleben zu lassen.

Olaf
495 Tage zuvor | #6 Sergej Müller

@Olaf
Freut mich ebenfalls, dass wir die Initiative am Leben erhalten können. Wie ich schon zu Dennis sagte, ich kann nicht mehr ruhig zusehen, wie manche Blogger aus Unwissenheit ohne jegliche Backups “rumlaufen”. Da kommt bei mir Gänsehaut auf.

Sergej
494 Tage zuvor | #7 Warteschlange

Von Natur aus mache ich mir von allen Sachen immer Backups. Warum weiß ic nicht, Faul kann ich nämlich auch sein. Also da mein Blog noch sehr neu ist, mache ich das alles noch per Hand. Aber auf Dauer werde ich mir Plugins und Tools dafür suchen, da hilfe mir dieser Beitrag sehr weiter. Also vielen Dank :-)

Warteschlange
494 Tage zuvor | #8 Sergej Müller

Ich wünsche mir ein Rundum-sorglos-Paket wie es Time Machine unter Mac OS für mich ist. Läuft unaufdringlich und unbemerkbar im Hintergrund und man kommt schnell an die “Rettungsdiskette” ran.

Sergej
494 Tage zuvor | #9 Schnurpsel

Das man sich nicht immer auf die vom Hoster vorinstallierten Werkzeuge verlassen kann, habe ich kürzlich selbst erfahren müssen:
http://schnurpsel.de/sicher-ist-sicher-datenbanksicherung-bei-strato-132/

Deshalb auch nochmal der eindringliche Hinweis, die entstandenen Backups immer auf Konsistenz zu prüfen. Was nützt die schönste Backupdatei, wenn sie beim Zurückspielen nicht oder nicht vollständig funktioniert.

Schnurpsel
494 Tage zuvor | #10 Sergej Müller

@Schnurpsel
Sicher ist es von Vorteil, die gesicherte Datei zu prüfen – schauen, ob das komprimierte Backup überhaupt entpackt werden kann, ist ein Schritt in die richtige Richtung.

Einen ZIP-Archiv auf korrekten Inhalt prüfen, kann man allerdings nur dann, wenn man die Sicherung selbst händisch im Browser angestoßen hat. Erledigt ein Plugin bzw. Script die Sicherungsroutine automatisch im Hintergrund, so befinden sich die Klone der Datenbank meist irgendwo auf dem Server – zur Kontrolle müssten diese in bestimmten Zeitabschnitten herunter geladen und geprüft werden. Lästig, so was.

Schöner wäre eine Art Prüfsumme, die nach der Fertigstellung des Backups geprüft werden könnte. Diese stellt sicher, dass die erzeugte Datei auch vollständig und nicht korrupt ist. Das müsste dann das Script/Plugin übernehmen und sozusagen eine Selbstkontrolle durchführen.

Sonst kann es natürlich passieren, dass die GZIP-Datei zwar dekomprimiert werden kann, das SQL-File aber nicht komplett geschrieben werden konnte, aus welchen Gründen auch immer (Ausführungszeit kann ein Stolperstein sein, siehe oben). Da steckt man als User eher in der Klemme, da man mit bloßem Auge die Vollständigkeit des Inhalts nicht verifizieren kann. Und jedes Mal die Datei öffnen und checken ist in meinen Augen auch nicht wirklich zeitsparend und überhaupt nicht effektiv.

Vielleicht schreibe ich doch ein einfaches Plugins, welches schnell, einfach und zuverlässig die Backups der wichtigsten Daten eines Blogs erstellt.

Sergej
494 Tage zuvor | #11 Schnurpsel

Stimmt, es wird natürlich gerade auch bei großen Datenbanken unübersichtlich und zu aufwändig, jedesmal die Daten in Augenschein nehmen zu wollen.
In meinem konkreten Fall mit eher wenigen Daten hätte es aber durchaus geholfen, ich ärgere mich ja deswegen auch über mich selbst.

Insofern kann ich es nur begrüßen, wenn Du Dich doch aufraffst, ein Plugin zu schreiben :-)

Schnurpsel
494 Tage zuvor | #12 der ewige Anfänger

Habe mir gerade vor ein paar Tagen erst selbst ein paar Gedanken zu Datensicherung in WordPress-Blogs gemacht. Falls es jemand interessiert:

http://www.semper-ti.de/2009-03-19-off-topic-sicher-ist-sicher

der ewige Anfänger
493 Tage zuvor | #13 Ivan

Das Freeware Tool MySQLDumper ist auf jedenfall zu empfehlen! Die Software kann über einen CronJob die Datenbank innert kürze und täglich sichern. Vor allem bei grossen Datenbanken ab 10MB ist PhpMyAdmin beim Import schnell mal überfordert.

Ivan
493 Tage zuvor | #14 Sergej Müller

@Ivan
Hab ich ebenfalls im Artikel erwähnt…

Sergej
483 Tage zuvor | #15 Sergej Müller

@Fabian
Gespräche mit WordPress-Nutzern bestätigen deine Aussage, dass viele der schlichten Meinung sind, die WordPress-interne Exportfunktion auch Media-Dateien sichert – also den kompletten Blog. Viele kennen sich mit der Materie einfach nicht aus, um zu beurteilen, dass im exportierten Archiv nur die Datenbanktabellen vorhanden sind.

Sergej
483 Tage zuvor | #16 fabian

“The Importance of being Backuped!” – fiel mir gerade ein als ich diesen Artikel gelesen hatte. Zuletzt wurde mir selbst bewusst wie wichtig ein Backup ist, als ich eines regnerischen Tages meinen Webspace leergefegt wieder fand. Und das letzte Backup lag mehrere Monate zurück. Zum Backupen benutze ich die WP Möglichkeit über “Export”. Leider und das hatte ich ganz vergessen, wird dabei ja lediglich die Datenbank hinterlegt, nicht aber die Plugins, Themes und alle anderen Media-Daten.
Backups fertige ich lediglich alle paar Wochen an, da ich (noch) nicht sehr viel schreibe, wird aber in Zukunft häufiger geschehen, wenn ich daran denke! Zur Sicherung gehören bei mir neben der Datenbank hauptsächlich die Media-Daten. Plugins habe ich meist noch woanders abgespeichert.

fabian
379 Tage zuvor | #17 Klaus

Extrem wichtig so ein Backup. Leider wird diese unliebsame Aufgabe gerne verdrängt. Ist es einmal dann doch passiert, alle Daten weg und kein Backup, dann kommt Freude auf…

Klaus
6 Tage zuvor | #18 Andreas Zech

Sergej: Als Entwickler ist man hierfür in der Regel sowieso sensibilisiert.

Für Otto-Normalverbraucher ist dies immer ein Aufwand, zumal Sie sich nicht technisch damit auseinander setzen wollen. MySqlDumper ist eine perfekte Lösung. Daniel Schlichtholz hat mir sogar schon mal am Sonntag mal geholfen, eine WP-Installation umzuziehen während eines KK-Antrages, da die neue Domain so nicht zugänglich war.

Er war übrigens begeistert von meinem Hoster – http://www.wordpress-webhosting.de – by http://www.interboost.de. Der Clou für mich:

Ich muss keine Backups machen, das wird einmal nachts regelmäßig gemacht und das bis zu 14 Tage. Ich kann per Mausklick dies sofort von heute Nacht oder vor 14 Tagen die Datenbank, die Files und E-Mail-Postfächer zurücksichern. Dauert keine 5 Minuten :)

Hut ab, gute Beitrag und wichtige Aktion für alle, die das (leider) noch nicht haben.

Andreas Zech

3 Verlinkungen auf den Artikel

› Initative Pro-Backup - Schon einmal ein Problem mit der Datenban [...]

› Die Linkpeitsche X - OpenOffice, WordPress, Streams, Desktop, Tw [...]

› LINKLOAD vom 24.03.2009 [UPLOAD Blog]

Kommentar verfassen