Alles hätte so einfach sein können, als ich das letzte WordPress-Update (v2.7) eingespielt habe. Aber mein Hoster sah das wohl anders, denn seit dem konnte ich den Adminbereich nicht mehr wirklich betreten.
Die Auswirkungen
Nach dem Update der Anwendung und nach dem Betreten des Adminbereiches fiel mir auf, dass der “Tellerrand” recht leer war. Ein Klick auf “Artikel”, was einfach alle bisherigen Beiträge auflistet, endete mit einem InternalServerError. Einen neuen Beitrag schreiben ging noch, einen alten bearbeiten nicht, da die Textbox einfach nicht erschien. Oder noch schlimmer, nach dem Bearbeiten eines Beitrages wurde dieser mit leerem Text gespeichert. Kurz: der Blog lief noch, aber schreiben war nicht mehr drin.
Die Hinweise
In den Apache-Logs fand ich folgendes:
PHP Fatal error: Out of memory (allocated 9437184) (tried to allocate 86440 bytes) in /web/wordpress/wp-includes/functions.php on line 160
FATAL: emalloc(): Unable to allocate 384125 bytes
Out of memory (Needed 8164 bytes)
WordPress database error MySQL client ran out of memory for query SELECT[...]
Solche Log-Einträge sind mir schon mal beim Update auf Version 2.5 aufgefallen, wo das Datenbank-Update-Script abbrach.
Die Ursache
Damals habe ich den Hoster angeschrieben und die Probleme detailiert erläutert. Darauf kam die nüchterne Antwort, dass bei allen gehosteten Domains ein Speicherlimitvon 10MB pro Script eingerichtet ist. Das steht aber nirgends, weder im Vertrag noch irgendwo sonst auf der Seite. Des weiteren wurde mir gesagt, dass eine Erweiterung dieser RAM-Grenze nicht möglich sei, nicht mal für Geld, da diese Einstellung für viele Domains gleich gilt. Für mich heißt das soviel wie: ich bin nur ein Huhn im Käfig und soll gefälligst fressen was auch anderen fressen.
Nachtrag: für einiges mehr an Geld geht das natürlich schon, so wurde mir z.B. ein vServer vorgeschlagen.
Die kurzfristige Umgehung
Beim Support hatte man damals noch eine Idee: PHP in älteren Versionen ist nicht ganz so Speicherhungrig. Ich habe damals von PHP v5.2.5 auf PHP v4.4.7 gewechselt, womit zumindest damals alles wieder ging. Beim heutigen Problem half mir das nichts mehr, denn ich war ja schon auf der alten Version.
Die Lösung
Mir fiel nichts anderes ein als auf einen neuen Server zu ziehen. Immerhin hatte ich mir, nachdem die Probleme vor ein paar Monaten eben schon mal aufgetreten waren, einen kleinen Server zugelegt. Also einfach alle Daten von /var/www kopieren und die Datenbank dumpen und auf dem neuen Server einspielen. Soweit, so kompliziert, denn das Ganze hat einen Haken, nämlich dass die Zeichensätze beim MySQL-Dump bei freenet.de komplett zerschossen werden.
Die Probleme beim Datenbank-Umzug
In der MySQLAdmin Oberfläche von freenet.de kann man zwar die Datenbank einfach exportieren, aber irgend eine Zeichesatzeinstellung, warscheinlich am Server selber, stimmte nicht, denn die Zeichen waren hübsch verwurschtelt. Clever wie ich bin (oder wie ich dachte zu sein) hab ich einfach mit dem Backup-Plugin einen Dump erstellt und wollte diesen benutzen, kam aber zum gleichen, unbrauchbaren Ergebnis: ein defkter Zeichensatz.
Die (aufwendige) Lösung des Datenbank-Zeichensatz-Problemes
Da ich keine brauchbare Daten extrahieren konnte, habe ich den Dump vom MySQLAdmin benutzt, im Texteditor geöffnet und nach à gesucht. Mit diesem Zeichen beginnen die falsch Codierten UTF8-Zeichen, sofern es Umlaute sind. Dieses Zeichen und das darauf folgende hab ich in mühsehliger Kleinarbeit dann per Suchen-und-Ersetzen in die korrekten Zeichen übersetzt. An sich ja kein Akt, da es bei Umlauten ja nur 7 Möglichkeiten gibt (öäüÖÄÜß), aber meine Probleme sind immer hinterhältig, denn die Zeichen waren manchmal 2 und auch 3fach falsch codiert, so dass sich immer neue Kombinationen ergaben.
Mein Fazit
Hoster sind nur für statische Seiten ausgelegt. Winzige Scripte sind noch drin, aber für mehr reicht es meist nicht. Oder zumindest nicht sehr lange. Eine gehostete Domain kommt für mich nicht mehr in Frage, denn auf Anfrage bei unterschiedlichen Anbietern kam immer das gleiche Problem auf: RAM-Begrenzung und etliche Features sind einfach nicht drin. Und ein gemieteter Server oder vServer ist mir definitiv zu teuer.