Movable Type 3.2アップグレードの際にBerkeley DBから他のデータベースに変える手順

Movable Type 3.2日本語版がリリースされて10日ほど経ちましたが、データベースとしてBerkeley DBを使っていると、いろいろと不具合が出ることが確認されています。
不具合対策をしたバージョンがリリースされるとのことです。

参考:SixApartのニュースリリース

ただ、Berkeley DBは簡易的なデータベース管理システムで、Movable Typeを動作させるのには、機能/性能的に十分だとは言えないです。
Movable Typeでは、Berkeley DB以外に、MySQL/PostgreSQL/SQLiteのデータベース管理システムを使うこともできます。
これらに変えれば、現時点の不具合を回避することができます。
また、サーバーの構成によっては、再構築のスピードが上がるというメリットもあります。

ということで、Movable Type 3.1xからMovable Type 3.2へアップグレードする際に、データベースも変換すことをお勧めします。
このエントリーでは、その手順を解説します。

1.現在のMT環境をバックアップ

万が一の事態に備えて、現在のMovable Type 3.1xの環境を、ご自分のパソコンに丸ごとダウンロードし、バックアップしておきます。

2.Movable Type 3.2を入手

SixApartのサイトから、Movable Type 3.2をダウンロードして、自分のパソコンで解凍します。

3.mt-config.cgiの設定

Movable Type 3.1xでは、設定ファイルの名前は「mt.cfg」でした。
一方、Movable Type 3.2では、設定ファイルの名前が「mt-config.cgi」に変わっています。

解凍したファイルの中に、「mt-config.cgi-original」というファイルがあります。
Movable Type 3.1xのmt.cfgを元にしてこのファイルを書き換え、「mt-config.cgi」というファイル名で保存します。

4.Movable Type 3.2のアップロード

Movable Type 3.1xをインストールしているディレクトリに、Movable Type 3.2を上書きします。
また、Movable Type 3.2ではCGIのファイルがいくつか増えています。
それらのパーミッションを書き換えて、実行可能にしておきます。

5.mt-check.cgiを実行

Webブラウザを起動し、「http://Movable Typeのインストール先/mt-check.cgi」に接続し、mt-check.cgiを実行して、結果を確認します。

6.mt.cfgの削除

Movable Typeのディレクトリから、mt.cfgファイルを削除します。

7.Movable Type 3.2へのアップグレード

Webブラウザを起動し、「http://Movable Typeのインストール先/mt.cgi」に接続します。
ログイン画面が表示されますので、ログイン名とパスワードを入力してログインします。
すると、「インストール完了」のメッセージが表示されますので、「アップグレードの開始」ボタンをクリックします。
しばらくの間、アップグレードの処理が行われます。「アップグレードが完了しました」と表示されたら、アップグレードは完了です。
「Movable Typeに戻る」ボタンをクリックして、Movable Typeにログインできることを確認します。
また、Movable Type 3.1xからデータが引き継がれていることも確認します。

8.mt-db-convert.cgiをインストール

今の段階では、データベースはまだBerkeley DBのままです。これを、MySQLなどに変換します。

Movable Type 3.2には「mt-db2sql.cgi」というCGIが入っていて、それで変換することができますが、SQLiteに変換する際には時間がかかって、途中で500エラーが出ることがあるという問題があります。
そこで、小川宏高さんのBlogの「Ogawa::Memoranda」で配布されている「mt-db-convert.cgi」を利用します。

このページに接続して、Zipファイルをダウンロードします。
解凍すると2つのファイルができます。そのうち、「mt-db-convert.cgi」を、Movable Typeのインストール先ディレクトリにアップロードします。
そして、そのファイルのパーミッションを書き換え、実行可能にします。

9.SQLiteへの変換

「http://Movable Typeのインストール先/mt-db-convert.cgi」に接続して、mt-db-convert.cgiを実行します。
データベースをSQLiteに変換する場合は、「Destination DB Configuration」の部分の「Object Driver」で「SQLite」を選び、その下の「Database」の欄に変換先のファイル名を入力します。
設定が終わったら、「Convert」ボタンをクリックします。

↓SQLiteへ変換する場合の設定の例(クリックすると別ウィンドウに元のサイズで表示されます)
SQLiteへ変換する場合の設定例

なお、変換先のファイルを出力するディレクトリは、あらかじめ作っておく必要があります。
また、そのディレクトリはCGIから書き込みができるようにパーミッションを設定しておく必要があります。

10.MySQL/PostgreSQLに変換

データベースをMySQLかPostgreSQLに変換する場合は、以下の手順を取ります。

  • mt-db-convert.cgiに接続します。
  • 「Destination DB Configuration」の部分の「Object Driver」で適切なドライバーを選びます。
  • その下の「Database」「DBUser」「DBHost」「DBPassword」の各欄に、MySQL/PostgreSQLに接続するための設定を入力します。
  • 設定が終わったら、「Convert」ボタンをクリックします。

↓MySQLに変換する場合の設定の例(クリックすると別ウィンドウに元のサイズで表示されます)
MySQLへ変換する場合の設定例

11.mt-config.cgiの書き換え

mt-db-convert.cgiで変換が終わると、mt-config.cgiの書き換え例が表示されます(Berkeley DBの設定の削除と、各種SQLの設定の有効化)。
その指示に従って、mt-config.cgiを書き換え、アップロードしなおします。

12.作業終了

ここまででアップグレードの作業は終了です。
Movable Typeにログインして、既存の環境が引き継がれているかどうかを確認します。

13.ファイルの削除

アップグレードが無事に済んでいれば、不要なファイルを削除します。
まず、Movable Typeのディレクトリから、mt-check.cgi/mt-db2sql.cgi/mt-db-convert.cgiを削除します。
また、「images」ディレクトリも削除します。
さらに、Berkeley DBのデータベースも、ディレクトリごと削除することができます(ただし、万が一に備えて、バックアップを取っておくことをお勧めします)。

14.補足

レンタルサーバーでは、データベースはMySQLが使えるところが多いと思います。
ただ、仕様に明記されていなくても、SQLiteを使えるレンタルサーバーもあります。
mt-check.cgiを実行した時に、「サーバーには、DBD::SQLiteがインストールされています。」と表示されれば、SQLiteも使えるはずです。

ロリポップはMySQLを使うことができますが、MySQLのサーバーの数が少なく、動作が重いといわれています。
実際、私も以前はロリポップでMySQLを使っていましたが、動作が重かったです。
ところが、CHEEBOWさんのBlog「Movable Typeで行こう」によると、ロリポップでSQLiteが使えるようになったとのことです
実際に試してみましたが、MySQLのときよりも動作が軽くなりました。
ロリポップユーザーの方は、SQLiteへの移行を試されると良いと思います。