Das Putzlowitsch Test- und SEO-Blog

Sicher ist sicher – Datenbanksicherung bei Strato

Datenbank-Sicherung

Regelmäßige Datensicherungen sind das Bloggers erste Bürgerpflicht, besonders vor einem Update auf eine neue WordPress-Version. Bei Strato gibt es dafür eine über den Kundenbereich erreichbare Version von phpMyAdmin. Diese habe ich bisher auch ohne Probleme genutzt, auch wenn sie bisweilen etwas träge daherkam.

Strato phpMyAdmin 2.6.4-pl3

Vor dem Update auf WordPress 2.7 habe ich natürlich auch erstmal eine Datenbanksicherung gemacht, zum Herunterladen wähle ich gewohnheitsmäßig die Option „GZip-komprimiert“. Die Datei ’schnurpsel_251_create.sql.gz‘ wurde gespeichert, alles in Ordnung, dachte ich, dann kann es mit dem Update ja losgehen.

Das Update auf WP 2.7 lief zunächst erstmal ohne Probleme, ich konnte mich in Adminbereich anmelden, das Blog selbst sah auf gut aus. Doch dann plötzlich gibt es beim Speichern eines neuen Artikels einen bösen Fehler 500, mit das schlimmste, was so passieren kann. Der Server hat da ein schwerwiegendes Problem. Nachdem ich zunächst nur einen kurzen Schwächeanfall des Servers oder der Datenbank vermutete wurde es aber leider nicht besser. Auch das Blog selbst meldete nur noch den 500er.

Sollte WordPress 2.7 etwa die Fehlerursache sein? Na gut, ist auch kein Beinbruch, ich hatte ja meine Kopie vom alten WordPress, also einfach die Verzeichnisse wieder umbenennen, die Datenbanktabellen löschen und die Datenbanksicherung zurückspielen. Doch was ist das? Da fehlen Tabellen, die Liste hört irgendwo bei ‚wp_posts‘ auf, da kommen doch eigentlich noch die Tag/Kategorie-Sachen (wp_term*) und die User-Tabellen (wp_user*). Hat beim Datenimport was nicht geklappt?
Die Datenbank-Sicherung ist praktisch eine Textdatei mit SQL-Anweisungen, also ganz normal als Text lesbar. Sie wird nur mit GZip gepackt. Beim Doppelklick auf die Datei meldet mir 7Zip jedoch nur:

7-Zip Archiverror

Das Problem

Ein Blick in die .sql.gz-Datei offenbarte dann das Dilemma, die Daten dort sind überhaupt nicht gepackt, sie stehen da als lesbare SQL-Anweisungen drin, und was noch viel schlimmer ist, die Daten sind direkt nach dem Artikel mit der ID 27 zu Ende, da kommt nichts mehr, EOF.
Dann fiel mir das „Strato Backup-Control“ ein, da werden regelmäßg meine Daten gesichert auf die ich dann über eine spezielles FTP-Login zugreifen kann. Vielleicht gibt es da auch eine Datenbank-Sicherung. Nein, ist leider nichts von Datenbanken zu finden, die Sicherung betrifft nur die Dateien im Webspace.

Das bestätigt mir telefonisch auch ein Support-Mitarbeiter von Strato, der mir dann aber gleich noch zu einem Upgrade auf das Paket „PowerPlus L“ (€ 14,90 im Monat) rät, da wäre dann auch ein Datenbank-Backup enthalten.

Dumm gelaufen, würde ich sagen. So habe ich halt meine letzte Sicherung vom April 2008 eingespielt und da ich in der Zwischenzeit hier nicht besonders aktiv war einfach die verlorengegangenen Artikel per Hand (aus dem Google-Cache) nachgetragen.

Aber was war passiert, hatte ich mich einfach nur zu blöd angestellt, mit phpMyAdmin eine Sicherung zu machen? Nun wollte ich der Sache auf den Grund gehen.
Also habe ich die unterschiedlichen Varianten bei der Sicherung durchgespielt, einmal unkomprimiert, dann Zip und auch GZip. Bei unkomprimiert und Zip ist alles in Ordnung, nur bei GZip tritt der Fehler reproduzierbar auf. Die Daten werden nicht komprimiert und fatalerweise irgendwann einfach abgeschnitten.

Also rufe ich nochmal beim Strato Support an und schildere meine Beobachtung. Der Supportmitarbeiter kann nach meiner Anweisung das Problem sogar reproduzieren, hat aber auch keine Erklärung dafür und gibt es per Service-Ticket an die Technik weiter. Die Antwort kommt ein paar Tage später per E-Mail:

Sie haben berichtet, dass Datenbanken über die MYSQL-Datenbankverwaltung nicht komprimiert werden können.
Wir haben diesen Sachverhalt geprüft und konnten keine Beeinträchtigung feststellen. Die Datenbank DBXXYYZZ wird gzip komprimiert als *gz Archiv mit 196KB (entpackt 894KB) angeboten…
Eventuell wird die Übertragung clientseitig angebrochen.

Langsam kamen mir Zweifel, habe ich doch etwa selbst irgendeinen Fehler gemacht? Oder ist mein Anliegen bei der Technikabteilung nicht richtig angekommen? Also rufe ich zum dritten mal an und werde schließlich zur Technik weiterverbunden.
Nach einigem hin und her fragt mich der Techniker, was ich denn eigentlich wolle. Wenn ich meine Daten sichern will, würde das schließlich funktionieren, halt nur unkomprimiert und mit Zip, und das GZip nicht funktioniert sei eher mein Problem. Der „WebDatabase Manager“ sei ohnehin nur eine Zugabe und nicht Vertragsbestandteil. Er rät mir sogar für die Datenbanksicherung selber entsprechende Tools zu installieren, etwa mySQLDumper. Egal, es hilft ja nicht weiter, sich zu streiten, nach 20 Minuten war das Gepräch beendet.

Im übrigen wird mit dem „WebDatabase Manager“ (phpMyAdmin) als „Strato Profi Feature“ geworben, dann sollte sowas auch richtig und vor allem zuverlässig funktionieren. Und auch die Tatsache, das der Datenexport mit Zip-Komprimierung funktioniert, hilft nicht wirklich weiter, denn beim Datenimport wird Zip nicht unterstützt.

Die Ursache

Irgendeinen Grund muß es ja haben, das bei mir, und auch beim zweiten Support-Mitarbeiter die GZip-komprimierung fehlschlägt. Mehr durch Zufall bin ich dann drauf gestoßen, denn überraschenderweise trat genau das Problem auch bei meiner lokalen phpMyAdmin-Installation auf, die noch eine relativ alte 2.6er Version war (2.6.3, bei Strato immer noch 2.6.4).

Sollte es doch irgendwie am Client, sprich Browser, liegen? Also probierte ich die GZip-Sicherung mal testweise mit dem Internet-Explorer und siehe da, alles ist bestens. Hmmm, eigentlich hatte das immer auch mit dem Firefox funktioniert, warum denn nun auf einmal nicht mehr? Könnte es am neuen Firefox 3 liegen, lange Zeit noch hatte ich den 2er in Benutzung. Die Vermutung bestätigt sich nach einem kurzen Test, auch mit dem Firefox 2.x gibt es keine Probleme, eine ordentliche GZip-Datei wird gespeichert.

Der Rest ist dann schnell ermittelt, es gibt tatsächlich eine Problem mit phpMyAdmin und dem Firefox der 3er Reihe im Zusammenhang mit GZip, welches vermutlich bei allen phpMyAdmin-Versionen bis Version 2.11.6 auftritt und mit Version 2.11.7 gefixt wurde.

Und was kann Strato nun dafür? Ganz einfach, die haben da einen mehr als drei Jahre alten phpMyAdmin zu laufen, auf den sich der Kunde möglicherweise verläßt. Dabei schreibt Strato in den FAQ zu phpMyAdmin sogar unter Anmerkung, daß man regelmäßig, etwas einmal jährlich, Updates bereitstellen will:

Evtl. auftretende Sicherheitsrisiken oder bekannte Bugs in phpMyAdmin werden von uns selbstverständlich sofort entfernt.
Updates oder Versionsänderungen werden voraussichtlich einmal im Jahr durchgeführt.

Im übrigen sieht es bei 1&1 bezüglich der Datenbanksicherung auch nicht besser aus, dort läuft ebenfalls noch die alte phpMyAdmin-Version 2.6.4-pl3 als „MySQL-Control-Center“ und auch dort funktioniert der Export mit GZip-Komprimierung nicht. Immerhin gibt es bei 1und1 noch eine funktionierende BZip-Kompression, die man dann sogar wieder importieren kann.

Keine Probleme gibt es hingegen bei All-Inkl, da läuft phpMyAdmin in der Version 2.11.7 und Host-Europe mit dem der fast ganz akuellen 2.11.9.1er Version.

Fazit

Zunächst muß ich mir an die eigene Nase fassen, denn man sollte grundsätzlich überprüfen, ob die Datenbanksicherung auch tatsächlich lesbar ist. Nur darauf zu vertrauen, das alles geklappt hat, wenn die Datei auf dem eigenen Rechner liegt, reicht nicht.

Andererseits muß ich die Nutzer von Shared-Webhosting-Paketen bei Strato und 1und1 davor warnen, auf die vorinstallierten Datenbanktools der Anbieter zu vertrauen. Die derzeit dort laufende phpMyAdmin-Version 2.6.4-pl3 ist mehr als drei Jahre alt und hat reproduzierbare Fehler, die zu Datenverlusten führen können.
Man sollte sich entweder selbst eine aktuelle phpMyAdmin-Version installieren oder auch andere Werkzeuge zur Datenbanksicherung, wie mySQLDumper, verwenden.

13 Kommentare »

Das neue WordPress 2.7

Ja, ich habe es getan. Ich habe hier auf WordPress 2.7 upgedated. Wenn es schief gegangen wäre, und es ist auch erstmal schief gegangen, wäre es nicht so schlimm gewesen. Das hier ist ja nur das „WordPress bei Strato Testblog“, also zum Testen. Gut, es haben sich in der Zeit seit dem ersten Artikel (der noch nicht mal von mir ist) im Juni 2007 doch einige Beiträge angesammelt, es sind auch durchaus nützliche Plugins enstanden, aber wenn es schief gegangen wäre, hätte ich das verkraften können.

Ja, ich habe auch vorher die Datenbank mit phpMyAdmin gesichert, die neuen WordPress-Dateien per FTP in ein neues Verzeichnis auf dem Server hochgeladen, mit meinem xcopy-Skript alle relevanten Daten der laufenden WP-Installtion (2.5.1) in das neue Verzeichnis übertragen. So hatte ich mein komplettes, altes WordPress sowohl auf Datei- als auch Datenbankeben als Sicherungskopie noch in der Hinterhand, dachte ich zumindest.

Das schöne an dem Kopier-Update-Verfahren ist, man kann einfach durch Umbenennen des Serververzeichnisses auf die neue Version umschalten, und im Fehlerfall auch wieder zurück.
Aber nach dem erforderlichen Datenbank-Update sah alles prima aus. Die neue Adminoberfläche im Backend gefällt mir ausgesprochen gut. Da wollte ich natürlich gleich einen Artikel schreiben, gesagt getan. Doch plötzlich, wie aus heiterem Himmel kommt ein Fehler 500 (schwerer Serverfehler), der schlimmste Fehler, den man sich im Web so vorstellen kann.
Als leidgeprüfter Strato-Nutzer ist man aber auch durch einen 500er nicht wirklich zu erschrecken, den gab es früher oft, wenn man als WP-Neueinsteiger ganz unbeschwert die Permalinks aktiviert hatte. Das war ohne funktionierendes mod_rewrite keine gute Idee. Aber auch das ist nun bei Strato kein Thema mehr.

Weiter lesen (2. Teil)

Keine Kommentare »

WordPress 2.5 – Shortcode und die Bildergalerie

Neue Features

In WordPress ab Version 2.5 wurde die Attachment-Verwaltung erheblich erweitert und verbessert. Sie firmiert nun unter dem Schlagwort Mediathek. Eine wesentliche Erleichterung ist meiner Meinung nach die Möglichkeit, mehrere Dateien (z.B. Bilder) auswählen und in einem Rutsch hochladen zu können. Ein weiteres Highlight sind die sogenannten Shortcodes, kleine Textbausteine, die bei der Ausgabe in viele schöne Sachen verwandelt werden können. Die Shortcodes sin aber eher etwas für Plugin-Entwickler, der normale Nutzer hat erstmal nichts davon.
Einen solchen Shortcode liefert WordPress aber bereits mit, es ist eine einfache Bilder-Galerie.

Die Worpress-Bildergalerie

Aus Anwendersicht ist das mit den Shortcodes ganz einfach, man fügt das gewünschte Kürzel, gegebenfalls mit Parametern, einfach in eckigen Klammern an der Stelle im Text ein, wo die Ausgabe erfolgen soll. Für die WP-Bildergalerie sieht das z.B. so aus:

[gallery columns='2']

Bei der Anzeige das Artikels wird dann dieser Shortcode z.B. durch eine Bildergalerie ersetzt:

So könnte es aussehen. Die Ausgabe läßt sich durch ein paar Parameter steuern, so legt der Parameter ‚columns‘ z.B. fest, wieviele Spalten die Galerie verwenden soll (Standardwert ist 3). Im Beispiel habe ich 2 Spalten eingestellt.
Alle Parameter und die Verwendung des Gallery-Shortcodes sind im WP-Codex beschrieben.

Erweiterung – Der Link

Eine wie ich meine wichtige Sache haben die Entwickler aber vergessen. In der Standard-Galerie wird vom Vorschaubild immer auf die Bilderseite (Beispiel Bild 1) verlinkt, nicht auf das Bild selbst. Das ist so im PHP-Quelltext fest „verdrahtet“. Dabei wäre es kein großes Sache gewesen auch dafür einen Parameter vorzusehen. Aber was nicht ist, kann man glücklicherweise mit einem Plugin nachrüsten. So habe ich einfach die originale gallery_shortcode-Funktion genommen und um den Parameter attlink erweitert. Das Plugin selbst und eine Kurze Beschreibung findet man auf meiner Plugin-Seite „123 Extended Gallery„.

Und noch etwas habe ich verändert. Im Originalcode wird der CSS-Teil zur Formatierung der Galerie direkt in den Artikel geschrieben. Das ist alles andere als HTML-konform. So habe ich den CSS-Teil rausgezogen und in den Header verlegt, dahin wo soetwas hingehört. Einziger kleiner Nachteil, die CSS-Sachen werden immer im Header ausgegeben, auch wenn später im Artikel gar keine Galerie vorhanden ist. Aber damit kann ich leben.

Ein Kommentar »

Neue WordPressversion 2.5

Der eine oder andere wird es schon bemerkt haben, ich habe von WordPress 2.3.3 auf Worpress 2.5 upgedated. Da bin ich auch relativ unbeschwert rangegangen, da das hier sowieso mehr ein Testblog ist, welches zudem mit den Unzulänglichkeiten des Strato-Webhostings kämpfen muß. Dabei sind es schon erheblich weniger Schwierigkeiten geworden, was Strato und WordPress anbelangt.

So konnte ich hier erstmal testen, ob meine eigenen Plugins funktionieren. Ja, das tun sie. Wobei ich das eine oder andere an die neuen Möglichkeiten von WordPress 2.5 anpassen werde oder schon angepaßt habe. Zudem ist mir grad ein nettes Feature aufgefallen, wenn man Tags (Stichwörter) eingeben will. Dann klappt nach Eingabe von mindestens zwei Zeichen eine Auswahlliste auf, aus der man dann einfach ein passendes, schon vorhandenes Stichwort auswählen kann. Fein Sache, das.

Keine Kommentare »

GROUP BY auf ein Unique Field kann durchaus sinnvoll sein

Kürzlich hatte ich einen Beitrag zu dem Problem mit WordPress und der Sortierreihenfolge bei MySQL 5.0.51 (wie es derzeit bei Strato verwendet wird) geschrieben und mich dort über das vermeintlich unsinnige GROUP BY mit einem eindeutigen Feld (ID) ausgelassen. Für eine einfache SQL-Abfrage, wie dort beim ersten Beispiel, ist das auch durchaus richtig, da ist das „GROUP BY id“ tatsächlich sinnfrei.

Bei WordPress ab Version 2.1 wurde das dann auch geändert, hier wird dieses GROUP BY mit der ID nur noch dann eingefügt, wenn es tatsächlich benötigt wird, nämlich wenn man die Abfrage auf bestimmte Kategorien oder Tags einschränken will. Das könnte z.B. etwa so aussehen:

<?php  query_posts( $query_string.'&cat=1,2,3' ); ?>

Hier will man zum Beispiel nur Artikel anzeigen, die in Kategorie 1, 2 oder 3 enthalten sind. Wenn nun ein Artikel mehreren Kategorien zugeordnet ist, würde das dazu führen, daß dieser Artikel auch mehrmals in der Liste steht und das will man ja nicht. Genau hier bewirkt das GROUP BY id, daß jeder Artikel nur einmal auftaucht. Man hätte das zwar ebenso mit DISTINCT erreicht, aber WP macht es halt mit GROUP BY. Letztendlich ergibt sich daraus ein Problem, welches aber einer fehlerhaften Implementierung von MySQL 5.0.51 zuzuschreiben ist.

Da ich bei mir nicht mit Kategorien oder Tags in den Abfragen arbeite, war mir das bisher auch nicht klar. Erst ein Beitrag im wordpress.org Forum hat mir die Augen geöffnet (Dank an Otto42 für die erhellenden Worte :-).

Was bedeutet das nun für die Praxis? Ganz klar, das Problem kann nur durch ein Update von MySQL behoben werden, da ist dann der Webhoster in der Pflicht. Nun ist es aber nicht ganz einfach, goße Hoster wie Strato dazu zu bewegen, zumal es MySQL 5.0.53 wohl auch noch nicht gibt.
In der Zwischenzeit kann erstmal mein Plugin helfen, welches das GROUP BY id in ein GROUP BY post_date „verbiegt“. Einen kleinen Nachteil hat das aber. Wenn es zwei oder mehrere Artikel mit auf die Sekunde übereinstimmendem Veröffentlichungszeitpunkt gibt, wird nur einer von diesen dargestellt.

Keine Kommentare »