Migration von Wordpress nach s9y

  • Urspruenglicher Autor: Ramon Kukla
  • Urspruengliches Datum: 27.05.2011

Mir ist keine Migration bekannt, bei der es nicht irgendwelche Probleme gab. So auch ein Wechsel von einer Blogsoftware zu einer anderen. Da denkt man „Ach, einfach nur einen Import der Daten und gut“, aber so einfach ist es oft nicht. In vielen Faellen gibt es nicht mal einen gescheiten Importmechanismus. Da ist dann Handarbeit angesagt.

Beim Migrieren meines privaten Blogs von Wordcodess nach Serendipity (s9y) waren die Vorzeichen etwas besser, da s9y zumindest einen Importer mitbringt (~/include/admin/importers/wordcodess.inc.php). Aber wie oben geschrieben… Migration laueft nicht problemlos. Daher hier mal ein paar Punkte, die ich im Rahmen der Migration zu bewaeltigen hatte. Vorab der Hinweis, dass ein Backup auf jeden Fall Sinn macht. Einmal ein falscher Befehl in der falschen Tabelle und man faengt, im schlimmsten Falle, von vorne an. Ja, ich scodeche aus Erfahrung :)

Um moeglichen Problemen mit Umlauten (ä, ö, ü) oder bestimmten Sonderzeichen (Halbgeviertstrich, Scharfes S) vorzubeugen macht es Sinn, diese <strong>vor</strong> dem Import anzupassen. Daher habe ich erst einmal ein Suchen/Ersetzen auf die Tabellen wp_comments und wp_posts gemacht. Hier einmal ein Beispiel fuer das Ersetzen von ä in den Beitraegen und Kommentaren.

UPDATE `wordcodess`.`wp_comments` SET `comment_content` = REPLACE(`comment_content`,'ä','ae');
UPDATE `wordcodess`.`wp_posts` SET `post_content` = REPLACE(`post_content`,'ä','ae');
...

Anschliessend habe ich noch, um keine unnoetigten Altlasten mitzunehmen, die Beitraege, die als post_type den Wert revision haben, geloescht. Das sind die Beitraege die sonst spaeter in s9y als Draft auftauchen.

DELETE FROM `wordcodess`.`wp_posts` WHERE `post_type`='revision';

Bitte beachten, dass es auch Werte wie etwa attachment oder page gibt. Somit waere es nicht so prima alles was ungleich revision ist zu loeschen. Der s9y-Importer macht es so, dass er alle Eintraege die nicht den Wert publish haben, als isdraft == true importiert.

Nun habe ich mal - mutig, mutig - einen Import der Daten in sy9 gemacht und geschaut, was es noch zu bereinigen gibt. Zum einen waren das bei mir die Accounts. Diese werden im Rahmen des Imports mitgenommen und es werden auch die Spalten author sowie authorid mit den „alten“ Werten - bei mir ports und 4 - versehen. Ich wollte aber ramon mit der ID 1 haben.

UPDATE `sy9`.`s9y_entries` SET author='ramon';
UPDATE `sy9`.`s9y_entries` SET authorid=1;

Ein weiterer Punkt auf meiner Liste war die Erstellung einer ordentlichen Kategorieliste. Dafuer habe ich erst einmal die entscodechenden Eintraege via TRUNCATE TABLE `s9y_entrycat`; (Welcher Beitrag ist wie kategorisiert) und TRUNCATE TABLE `s9y_category`; (Welche Kategorien gibt es) geleert und neue Kategorien eingepflegt.

INSERT INTO `kl_s9y_ramon`.`s9y_category` (`categoryid`, `category_name`, `category_icon`, \
`category_description`, `authorid`, `category_left`, `category_right`, `parentid`, \
`sort_order`, `hide_sub`) VALUES (NULL, 'Adminstories', '', '', '0', '1', '2', '0', 0, 0), \
(NULL, 'Alter Inhalt', '', '', '0', '3', '4', '0', 0, 0),
...

Das anschliessende kategorisieren musste dann, zumindest bei mir, von Hand erfolgen, da ich mir jeden Beitrag noch mal anschauen musste. Ansonsten koennte man auch etwas wie

INSERT INTO `s9y`.`s9y_entrycat` (`entryid`, `categoryid`) VALUES ('2', '2');
INSERT INTO `s9y`.`s9y_entrycat` (`entryid`, `categoryid`) VALUES ('3', '2');

verwenden. Damit wuerde dann der Beitrag mit der ID 2 und 3 der Kategorie mit der ID 2 zugewiesen.

Im Rahmen meiner Migration habe ich mehrfach einen Fehler gemacht, so dass ich den Datenimport auch jedesmal gemacht habe. Da ich nicht jedesmal eine neue Datenbank erstellen wollte habe ich mich darauf beschraenkt, vor jedem neuen Versuch, die fuer mich relevanten Tabellen zu leeren und meinen Benutzer anzulegen.

TRUNCATE TABLE `s9y_authors`;
INSERT INTO `lx_logbuch`.`serendipity_authors` (`realname`, `username`,`password`, \
`authorid`, `mail_comments`, `mail_trackbacks`, `email`,`userlevel`, `right_publish`, \
`hashtype`) VALUES ('Ramon Kukla','ramon', 'abcdefghijklmnopqrstuvwxyz0123456789abcd', \
'5', '1', '1', 'ramon@kukla.info', '255', '1', '1');
TRUNCATE TABLE `s9y_category`;
TRUNCATE TABLE `s9y_comments`;
TRUNCATE TABLE `s9y_entries`;
TRUNCATE TABLE `s9y_entrycat`;
TRUNCATE TABLE `s9y_permalinks`;
TRUNCATE TABLE `s9y_references`;
TRUNCATE TABLE `s9y_refs`;

Alles in allem war die Migration, allerdings auch aus weiteren Gruenden, eine sehr zeitintensive Geschichte. Der Grund, warum ich nach einem Wechsel von s9y zu Wordcodess und nun wieder zu s9y zurueck bin, sind ueberschaubar. Ich fuehle mich bei s9y einfach wohler, der Support im Forum ist prima und es ist - nicht gemessen, aber mein subjektiver Eindruck - schneller als Wordpress.

Zurück zur Uebersicht