Movable TypeのDB移行

2台のサーバをApacheの仮想サーバ機能を利用した集約に成功したところまではよかったのですが、いろいろアクセスしてみたらMovable Typeで作ったページのリンクを辿るとエラーが出るということに気が付きました。

よくよく考えてみたら、Movable Typeが利用するDB、つまりMySQLのDB移行をすっかり忘れていて、それがエラーが出る原因でした。トップページなど一部のコンテンツはHTMLとして出力されるのでDBがなくても表示されるのですが、CGIが動いて表示される部分は表示すべき内容が存在しないので当然表示されないということです。

ということで、あわててMovable Typeで利用していたコンテンツの移行を行うことになりました。

とはいっても、思ったよりも手順は単純で、10分足らずで終了してしまいました。作業に入る前に簡単に検索をしましたが、こちらのサイトが非常に参考になりました。なお、管理人のMovable Typeは現在ほぼ放置状態にあるため、バージョンは数世代前のVer.4.2になりますので、参考にされる方は注意してください。

1. 移行元のDB名、ユーザ名、パスワードを確認する

当然ですが、移行するには移行対象データにアクセスする必要があります。このため、標記の情報が必要となるのですが、Movable Typeのファイルが格納されているディレクトリにあるmt-config.cgiの中にクリアテキストで書かれているので、わからなければそちらを参照します。

2. 移行元のDBのデータをエクスポートする

こちらはコマンド一発です。MySQLにログインしていない、シェルの状態で以下のコマンドを実行します。

% mysqldump -u MT4 -p(パスワード) MT4 >bflets_dyndns.sql

同名なので紛らわしいですが、-uの次の”MT4″はユーザ名、パスワードの後の”MT4″はDB名です。結果は標準出力にSQL文として出力されるので、それを適当なファイルにリダイレクトします。

3. 移行先のサーバのMySQLにDBを用意する

今度は移行先のDBにログインして、受け皿となるDBを作成します。設定ファイルもそのまま移行するのであれば、移行元と同じ名前のDBを作成することになるでしょう。Movable TypeのデータはデフォルトではUTF8でMySQLに格納されるので、DBを作成する際に文字コードを明示的に指定しておきます。

mysql > create database MT4 CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
mysql > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| MT4                |
| mysql              |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.01 sec)

4. DBユーザを作成し、必要な権限を付与する

データをインポートしただけでは、root以外はそのデータにアクセスすることはできません。移行元サーバのmt-config.cgiに記述されていたユーザを新規に作成して、必要な権限を付与する必要があります。

mysql > CREATE USER MT4 IDENTIFIED BY '(パスワード)';
Query OK, 0 rows affected (0.01 sec)
mysql > GRANT ALL PRIVILEGES ON MT4.* TO MT4@localhost IDENTIFIED BY '(パスワード)';
Query OK, 0 rows affected (0.00 sec)

これで、MT4というDBに格納されているデータにMT4ユーザがアクセスできるようになります。

4. エクスポートしたデータをインポートする

移行元に出力したエクスポートデータを移行先のサーバに持ってきて、以下のコマンドを実行します。

% mysql -u root -p(パスワード) MT4 < bflets.db

インポートといっても、実態はbflets.dbというファイルにリダイレクトで出力されたSQL文をそのまま実行しているだけです。これが首尾よく完了すれば、DBの移行は完了です。Movable TypeのCGIにアクセスすると、今度は正常に動的なコンテンツが表示されるはずです。

コメントする