MovableType 5.2.9→5.2.9(データベース移行)
概要
MovableType は 6にバージョンアップする際に、PostgreSQLおよびSQLiteをサポートから外した。 このため、これらをバックエンドに利用していたユーザは、バージョンアップ前に、データベースの移行を行わなければならない。
移行の手順は、公式サイトに掲載されているが、この手順通りにやっても、うまくいかないケースがあるため、ここに注意点をメモとしてまとめておく。
バックアップ
データのバックアップ及び復元は、MTの管理画面から行う。 システム→ツール→バックアップで全てのデータをバックアップする。 この際に、注意すべきことは、デフォルトの「分割しない」を選んではならないということである。
データファイルのサイズがある程度以上になると、後の復元でデータを処理できなくなってしまうと言う致命的ともいえる欠陥があるためである。
ここでは、最小の300KBで分割するように指定した。
バックアップファイルは、/tmp に出力される。
設定の変更
mt-config.cgi を編集し、データベースを、PostgreSQLやSQLiteからMySQLへと切り替える。
ObjectDriver DBI::mysql Database mtdata DBUser mtuser DBPassword パスワード DBHost localhost
こんな感じで。DatabaseやDBUserは任意のもので構わない。 指定したユーザとデータベースを MySQLに作成しておく。
# mysql -p mysql> create database mtdata; ... mysql> grant all privileges on mtdata.* to mtuser@'localhost' identified by 'パスワード'; ... mysql> flush privileges;
これ以外の設定はいじる必要は無い。 これで準備は完了である。
復元
バックアップで出力されたファイル群を、<MTディレクトリ>/import にコピーする。 importディレクトリは予め空にしておく。
# cd <MTディレクトリ> # rm -f * # find /tmp -type f -user apache -exec mv {} import \;
ここで、Movable Typeの管理画面に接続する。 管理画面は、初期状態のため、管理ユーザの作成と、管理ページの設定を尋ねられるので、適当に答えておく。
ログインしたら、システム→ツール→復元 と進み、グローバルテンプレートの上書きをするかどうかのチェックボックスに適宜チェックを入れ、ファイル名を指定しないで復元を開始する。
あとは、復元が終了するのを待つだけである。
データは全部復元したのに復元が終わらない場合
データの書き戻しをした後も、バックエンドで何か作業が走っているようで、実はここから30分くらい、次のステップに進むのにかかる場合がある。
一般的に、Apacheのタイムアウトは300秒に設定されているので、この設定ではバックアップからの復元が完了しない。
Apacheの管理が出来る場合は、Timeoutを一時的に3600位にして、再起動してやればこの問題は回避できるが、そうでない場合は、データベースの移行、ひいてはMovableType 6へのアップグレードは断念した方がいいだろう。
かように、実は、データベースの移行は簡単な話ではないのである。 これは、あるサービスから別のサービスへデータを移行する場合にも同じ問題が発生する可能性があると言うことである。
MovableTypeのバックアップと復元の脆弱さは、こういった移行を困難にもしている。