WordPress Downgrade

25. Dezember 2009

Nicht jeder ist mit der neuen WordPress Version 2.9 zufrieden. Man kann aber auch ins Zweifeln kommen wenn bereits wenige Tage nach der Veröffentlichung bereits das erste Wartungsupdate erscheint (de/en). Ist man jetzt Anwender oder Beta-Tester?
Anhand des ersten Wartungsupdate wird klar das man heutzutage kaum noch eine Fehlerfreie Software entwickeln kann. Der wohl gröbste Fehler betrifft einen Fehler in verschiedenen Versionen der PHP Curl-Extension. Ein Fehler der sehr ärgerlich ist, sich jedoch aufgrund der vielen im Umlauf befindlichen Versionen von PHP nicht immer gänzlich vermeidbar ist.

Jedoch sind die Fehler in WP 2.9 bei manchem gravierender als fehlende Pingbacks. Und so wünscht sich der eine oder andere sehnlichst sein bewährtes 2.8.x zurück. Normalerweise müsste man davon ausgehen das dies ohne Backup und/oder Datenverlust nicht möglich ist. Wühlt man jedoch ein wenig im Code von WP2.9, merkt man das ein Downgrade diesmal machbar ist. Relativ einfach sogar.
Ein Downgrade ist im Grunde genommen lediglich eine Umkehr des Upgrades. Bei älteren WP-Versionen wurde beim Upgrade gerne mal eine oder mehrere Tabellen gelöscht, dafür neue oder zusätzliche Tabellen angelegt. Bei WP2.9 ist dies glücklicherweise nicht der Fall. Zumindest soweit ich den Code durchforstet und verstanden habe.
Ich habe die folgenden Schritte auf meinem lokalen Server ausprobiert und es hat fehlerfrei funktioniert. Ein installiertes WordPress 2.9 konnte ohne Probleme auf Version 2.8.4 zurückgestuft (gedowngradet!?) werden. Jedoch kann und will ich keine Garantie dafür übernehmen das es bei anderen genau so unproblematisch und fehlerfrei über die Bühne geht.

Was ist nun zu tun?

Erst einmal eine Warnung: Dieses Downgrade funktioniert nur von Version 2.9 auf Version 2.8.x!
Beim Update von einer WP-Version zu einer neueren werden ggf. Tabellen gelöscht. D.h. in alten WP-Versionen werden Tabellen benötigt die u.U. in neueren Versionen nicht mehr vorhanden sind (z.B. link2cat, post2cat). Deshalb ist es nicht ohne weiteres möglich einen Downgrade auf jede beliebige alte WP-Version durchzuführen! Für einen Downgrade auf eine wesentlich ältere Version müsste man sämtliche Beiträge und Kommentare exportieren und sie in der älteren WP-Version wieder importieren.

1. Backup
Auf alle Fälle macht man ein Backup. Und zwar von allen Daten, also sowohl von den PHP-Dateien als auch von der Datenbank. Sollte irgend etwas schief laufen, hat man zwar sein WP2.8 nicht zurück, dafür aber immerhin noch sein hakeliges WP2.9.
Wie man WordPress am besten sichert, dazu gibt es im Netz reichlich Anleitungen. Die PHP-Dateien (und ggf. andere Dateien) kann man mit einem FTP-Programm (z.B. Filezilla) sichern. Ein Datenbankbackup bekommt man mit jedem halbwegs brauchbaren MySQL-Tool (z.B. phpMyAdmin oder MySQL-Admin) hin.

2. Platte putzen
Wer ein  Roundup des Speicherplatzes machen will, hat nun die beste Gelegenheit dazu. Wer dies nicht nötig hat oder sich davor fürchtet, der löscht zumindest die Dateien und Verzeichnisse die zu WordPress gehören. Einzig die .htaccess, wp-config.php und das Verzeichnis wp-content (ggf. noch die favicon.ico) lässt man unberührt. Warum und weshalb das so ist, möchte ich jetzt hier nicht erklären, passende Erklärungen findet man ebenfalls zu Hauf im Netz.

3. Altes WordPress
Dieser Schritt ist ggf. etwas schwieriger, steht WP2.8.x schließlich nicht mehr auf den offiziellen Seiten zum Download bereit. Zum Glück stehen aber die alten Versionen zumindest im englischen Original im Archiv von WordPress.org noch zur Verfügung.
Leider stellt WordPress-Deutschland kein vergleichbares Release-Archiv der DE-Versionen zur Verfügung. Vielleicht finden sich ja noch ein paar Leute die entsprechende Versionen noch irgendwo auf der Platte haben und diese für ein Archiv zur Verfügung stellen. Ich habe hier noch die 2.8.4er DE-Version und kann sie bei Bedarf zur Verfügung stellen.

Die alte 2.8er-Version installiert man wie gewohnt auf den sauberen Webspace, ruft aber jedoch nicht die update.php auf! Auch vom Backend oder anderen Seiten lässt man erst einmal die Finger weg. WordPress würde immer versuchen die Datenbank zu aktualisieren, denn es geht davon aus das die verwendete Datenbank nicht aktuell (unpassend) ist. Dies kann, muss aber nicht zu einem irreparablen Schaden führen. Nach der Installation also erst Schritt 4 ausführen, dann kann man anschließend schauen ob das neu installierte alte WordPress funktioniert.

4. Datenbank anpassen

Dies ist der entscheidende Schritt. Denn WordPress trägt in der Datenbank eine Versionsnummer ein anhand derer es erkennt welche Datenbank zu welcher WP-Version gehört (grob formuliert). Eben jene DB-Versionsnummer müssen wir nun händisch in die Datenbank eintragen. Welche Versionsnummer dies ist, verrät uns eine PHP-Datei aus dem Verzeichnis wp-includes. Dazu öffnet man die Datei version.php (machbar mit jedem beliebigen Texteditor) und schaut sich die Zeile mit $wp_db_version an. Für WP 2.8.4 wäre dies (zumindest bei mir) 11548.
Nun benötigen wir wieder ein MySQL-Tool (z.B. phpMyAdmin s.o.), denn wir müssen eben jene Zahl in die Datenbank eintragen.

Downgrade 2

In der Tabelle wp_options* suchen wir uns die Zeile heraus die in der Spalte option_name die Bezeichnung db_version trägt. Dort ändern wir den Wert in den, den wir uns gerade aus der Datei version.php gesucht haben.
In phpMyAdmin würde man dazu links auf wp_options klicken, dann oben auf “Suche“, anschließend wie im Screenshot gezeigt “db_version” eintragen (Gleichheitszeichen aus der Dropdown-Liste auswählen) und auf “OK” klicken. Im nächsten Fenster klickt man dann auf den Stift links (siehe 2. Screenshot) und trägt dann die DB-Version aus der Datei version.php ein.

* wp_ ist der Standard-Präfix für die WordPress-Tabellen. Hat man einen anderen Präfix gewählt, z.B. meinWP_, dann muss man natürlich auch diesen verwenden und die Tabelle meinWP_options verwenden.

Tada!
Fertig ist der Brei, die Uschi WordPress läuft wieder unter 2.8.x und nervt uns mit dem Hinweis das Version 2.9 zum Download bereit steht.

Noch ein paar kleine Anmerkungen…

Mir erscheint es, ehrlich gesagt, auch zu einfach um wahr zu sein. Jedoch konnte ich bisher keine Probleme nach dem Downgrade fest stellen. Das einzige Problem welches ich hatte, war ein Kommentar den ich noch unter 2.9 in den neuen Papierkorb verschoben hatte. Dieser war mit “post-trashed” gekennzeichnet. WP2.8.x kennt diese Bezeichnung natürlich nicht und meldet einen unbekannten Index. Dies lässt sich aber mit einem kleinen händischen Eingriff in der Datenbank lösen. Einfach alle Datensätze mit “post-trashed” löschen oder das “post-trashed” aus den Datensätzen entfernen.
Zudem ändert das Update auf Version 2.9 einen Wert in wp_options. Die Option thread_comments_depth wird auf den Wert 2 herauf gesetzt sofern er vorher bei 1 lag. Die Option thread_comments wird zusätzlich auf 0 gesetzt. Beides betrifft lediglich Blogs die verschachtelte Kommentare verwenden. Sofern dies der Fall ist, dürfte der erste Wert ohnehin höher sein, also durch das Update nicht verändert worden sein. Sollten später verschachtelte Kommentare angewendet werden, so wäre die Voreinstellung 2 anstatt 1. Kann man händisch ändern, muss man aber nicht.

Ich hatte auch zuerst den einfachen Weg über die update.php gewählt. Dies funktionierte auch ganz gut, es gab im Betrieb ebenfalls keine Fehler. Jedoch meldete die update.php zwei Fehler weil sie entsprechende Tabellen nicht löschen konnte, die wurden nämlich bereits beim Update von 2.7 auf 2.8 gelöscht. Ich würde jedoch davon abraten den Weg über die update.php zu gehen.  Man kann nie so genau voraussagen welche Aktionen dabei durchgeführt werden.

So. Falls jemand sich wagt das Downgrade auf diesen Weg durchzuführen, würde es mich freuen ein paar Erfahrungsberichte zu lesen (Trackback/Kommentar). Sollte es bei jemanden völlig schief laufen, wäre ich über entsprechendes Feedback ebenfalls erfreut. Denn dann kann ich den Beitrag ggf. anpassen bzw. komplett löschen.

Ralf

Es existieren 2 Kommentare für diesen Eintrag:

2

[...] erste Update im Rahmen von Wordpress 2.9 lässt nicht lange auf sich warten. Die Wordpress Macher werkeln bereits [...]