« 明後日くらいに更新再開 | メイン | 1週間ぶりに復帰 »
2005年11月30日
BerkeleyDBからSQLiteへ
Movable Type3.2でデータの保存形式をBerkeleyDBにしていると、突然indexが生成されなくなり500エラーが出るバグがあると聞いていましたが、突然その症状が発生し始めたのでデータをBerkeleyDBからSQLiteへ移行することに。
まずはmt-check.cgiを起動しサーバーにSQLiteがインストールされているかを確認してからmt-config.cgiの編集を行います。mt-config.cgiを開いたらSQLiteの設定部分を探しObjectDriverとDatabaseをコメントアウトしている#を外し、必要な設定内容を書き込んだら保存してFTPでサーバーへアップして、純正の移行ツールmt-db2sql.cgiを起動。
しかし、エントリーの量が多いためデータの変換途中でmt-db2sql.cgiがタイムアウトしてしまいデータの完全移行は無理そう。仕事場においてあるテスト用サーバーに同じ環境を作り、タイムアウトしないように設定変更してから変換するという強引な手段もあったのですが、同じ問題に行き当たっている人は多いだろうとGoogleで検索したところOgawaMemorandaさんのmt-db-convert.cgiを発見。
まずはmt-db-convert.zipをダウンロードして解凍。ちなみに、中には二つファイルが入っていますが31が付いている方はバージョン3.1用です。使用しているMovable Typeに合ったファイルをサーバーへFTPでアップロードしてからパーミッションを705にして起動すると入力画面が表示されます。

左側が変換元で右側が変換先となります。左側の情報はmt-config.cgiから自動的に読み込まれ設定不要なので、右側の変換先の設定を行います。
まずはSQLiteのデータを保存するディレクトリを作成します。名前は何でも良いのですが分かり易いようにsqliteでもOK。ディレクトリを作成したらディレクトリのパーミッションを755にしてください。
ディレクトリの作成が終わったら変換先の設定を行います。まずはObjectDriverのプルダウンメニューをSQLiteに。続いて左側のDataSource: (Required for BerkeleyDB)をコピーして右側のDatabaseへ貼り付けて、BerkeleyDBが置いてあるディレクトリ部分を削除してから新たに作成したSQLite用のディレクトリを書き込んでください。
ディレクトリを書き終えたらデータを保存するファイル名を指定します。これも分かり易いようにsqlite.dbでOKなので、右側のDatabase欄に書き込んだディレクトリの後ろにデータベースファイル名も書き込んでください。ちなみに、私が行った設定だとこのようになります。
/home/sites/lolipop.jp/users/lolipop.jp-**********/web/mt/sqlite/sqlite.db
全ての設定が終わったらConvertボタンを押してください。スクリプトが起動し変換作業が始まります。
変換作業が終わったらページ下部に設定に必要な情報が表示されるので、それを元にmt-config.cgiファイルのSQLite部分を書き換え、BerkeleyDB部分を#でコメントアウトしてサーバーにFTPでアップロードしてください。その時ついでにmt-db-convert.cgiのパーミッションを600に変更するかmt-db-convert.cgiを削除して、他人にいたずらされないようにしましょう。
もし、.htaccessを使えるサーバーなら
order deny,allow
deny from all
というような外からディレクトリ内を覗けない設定にした.htaccessをSQLite用のディレクトリの中に置いてください。
最後に管理画面からログインしてサイトの再構築を行えばデータの移行作業は終了です。
投稿者 kenji : 2005年11月30日 09:40
トラックバック
このエントリーのトラックバックURL:
http://kensbar.net/mt/mt-tb.cgi/743

