Entry

WordPress 移行記録 - DB の移行とか

2011年05月10日

WordPress は初めて使うもんで,まだローカルで実験しているところ。移転先の環境が整わないので,まだしばらくこっちに書きます。WordPress は,一応ソースを一通り読んで,テンプレートやプラグインの動作もある程度理解できたので,それっぽく運用できそうな感じ。機能の割に作りが簡単で,よくできたシステムだと思います。

一方,ユーザ側からのカスタマイズの方法については,こちらを読んでいます。(デザイナーではなく)技術屋さんが書いているだけあって,要所をきちんと捉えている。コピペで済ませて「カスタマイズ!」とか言ってる他書とは違い,動作原理を垣間見せる記述はすばらしいと思います。WordPress のカスタマイズ本の中では突出しているといっていい。もっとも,主に RDBMS やウェブプログラミングの経験がある程度ある方面向けなので,単にホームページを作ってちょっとだけ動きを変えたい……とかいう方には向いてません。

PHPによるWordPressカスタマイズブック―3.x対応
藤本 壱
ソシム
売り上げランキング: 26906

一方,ローカルでは試験的に MovableType にあるエントリを WordPress のテーブルに収めようとゴニョゴニョやっていたのでした。うちのサイトは,ブログシステムの機能の中でも,各エントリを管理する機能くらいしか使ってないので(ぶっちゃけ,日付とタイトル・本文くらいが移行できればいい),テーブルをひとつコピーすればそれで済んでしまうんでねいか……とかとか。

旧サイトのデータは,最終的に DocBook XML でファイルとして管理しようと思っているので(そうして取っておけば,HTML にも PDF にも変換できる),新 DB への移行は半分遊びなんだけれども,うまくできるなら,これはこれで公開してもいいのかもしれない。

とゆことで,ちょっこしやってみた。MovableType のエントリ管理テーブル(mt_entry)を,新 DB のテーブルにコピーして,こいつを WordPress の投稿管理テーブル(wp_posts)にコピーする作戦です。

まずは,コピーから。新 DB が MySQL 5.1 なのに対して,MovableType 3.36 のテーブルは MySQL 4.X 向けに作られていたので,スキーマ定義を少し変えて(TIMESTAMP 型を DATETIME 型に変えて,各種制約や外部キーの定義をいじったくらい) CREATE。あとは,ダンプしておいた SQL 形式の旧データを流し込みます。これはそれほど難しくない。

次に,WordPress のテーブルにコピーしてみる。こんな SQL をひとつ流すだけ。

INSERT INTO wp_posts (
  id,
  post_author,
  post_date,
  post_date_gmt,
  post_content,
  post_title,
  post_excerpt,
  post_status,
  comment_status,
  ping_status,
  post_password,
  post_name,
  to_ping,
  pinged,
  post_modified,
  post_modified_gmt,
  post_content_filtered,
  post_parent,
  guid,
  menu_order,
  post_type,
  post_mime_type,
  comment_count
)
SELECT
  entry_id,
  1,
  entry_created_on,
  CONVERT_TZ(entry_created_on,'+09:00','+00:00'),
  CONCAT(entry_text, entry_text_more),
  entry_title,
  NULL,
  "publish",
  "open",
  "open",
  NULL,
  entry_basename,
  NULL,
  NULL,
  entry_modified_on,
  CONVERT_TZ(entry_modified_on,'+09:00','+00:00'),
  NULL,
  0,
  CONCAT("http://localhost/blog/", DATE_FORMAT(entry_created_on, "%Y/%m/%Y%m%d%H%i%S")),
  0,
  "post",
  NULL,
  0
FROM mt_entry
WHERE 1=1

決め打ちが結構あるんだけれども,これは対応するデータがないから仕方ない。また,ローカルでやってるので,アーカイブの URL が localhost になってたりするけれども,おおむねこれでコピーできました。カテゴリがないのと,収める場所が多少違うくらい。ブラウザ上からも,個別・月別・日別のアーカイブでそれなりに見ることができた。もう少し工夫すれば,全部移行できるのかも。

登録されたデータをそのまま使うかは分からないけれども,とりあえず,テストデータ程度のものはできました。もう少しいろいろいじってみる。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN