BerkeleyDBからSQLiteに移行

MobavleType 3.2 への移行を考えてテストをしているわけなんですが、BerkeleyDB に関してはテンプレートに recently_commented_on 利用していると問題があります。

この件については ogawa さんの下記の記事が非常に参考になり、加えてこの件に関するパッチも作成されておられます。

Ogawa::Memoranda : MT 3.2でrecently_commented_onとBerkeleyDBに嵌っている人が多い件について

要するに、「recently_commented_on の仕様変更」と「MT::Entry->comment_latestでやたらメモリを消費するという、BerkeleyDB特有の問題」によってメモリ消費量増大やパフォーマンス低下が発生し、リビルドでタイムアウトしてしまうことがある、ということですね。

ただ当サイトにおいては、エントリー数増加に伴ってリビルドなどのパフォーマンスが悪く、以前から他のDBMSに移行しようと考えていました。ロリポップ!では MySQL も利用できますが、いかんせんMySQLのサーバ負荷が読めないため二の足を踏み、騙し騙し BerkeleyDB のまま運用していました。

そこで CHEEBOW さんの「MovableTypeで行こう!」に書かれていた記事

MovableTypeで行こう!: BarkeleyDBからSQLiteへ移行してみる

でロリポップ!にも SQLite モジュールがインストールされている事を知り、いい機会なので早速 MT3.2 より先に SQLite へ移行してみることに。

移行作業にあたっては、ogawa さんの下記記事が参考になりました。

Ogawa::Memoranda : SQLiteをMovable Typeで使ってみる

実際に移行時に使ったのは、これもやはり ogawa さんの下記 CGI スクリプト

Ogawa::Memoranda : mt-db-convert.cgi: MTデータベースの相互変換CGIスクリプト

を利用し、BerkeleyDB -> SQLite にコピー。mt.cfg をさくっと変更してデータの移行を確認。リビルドで完了。

ogawa さん、大変参考になる記事をありがとうございました。

9 Responses to “BerkeleyDBからSQLiteに移行”

  1. Irana Says:

    ああ、、、ヴァリウム男爵さんはSQLiteに移行されたんですね…
    うらやましいです。
    ロリポのMYSQLサーバー、やはりものすごく負荷が高いらしく、特に3.2にしてからやたらと500エラーが出ます。
    そのためMySQLからSQLiteに変更したいんですけど、
    どうもやり方が見当たらなくて…

    BerkeleyDBからSQLite とかBerkeleyDB からMySQLのやり方ばっかり引っかかってきて、肝心のMySQLからSQLiteへのやり方がわからないです(涙)

    一回MySQLからBerkeleyDBにして、そこからSQLiteにするしかないでしょうか?

  2. ヴァリウム男爵 Says:

    Iranaさん、どうも。

    上の記事で紹介した ogawa さんの mt-db-convert.cgi を利用すれば相互変換が可能みたいです。(僕自身は BerkeleyDB -> SQLite しか試していませんが)

    是非、お使いになってみてはいかがでしょうか?

  3. Irana Says:

    ヴァリウム男爵さん、ありがとうございます。
    やってみたんですけど、エラーでまくりなんです(涙)>mt-db-convert.cgi

    今ogawaさんにも質問中です、、、
    あうん、ロリポのMySQLがもっと軽ければこんなことで悩まなくてもいいのに~

  4. Irana Says:

    mt-db-convert.cgiの3.2対応版をogawaさんが出してくださいましたので、問題は解決しました。

    ところで、ヴァリウム男爵さん、MT4iは何か設定いじりました?
    SQLiteにしたとたんに500エラーなんですけど…
    (3.2でも表示できているのは確認済み)
    教えて君になってて申し訳ないんですが、
    設定変更されているようであれば教えてください。
    お願いします。

  5. Irana Says:

    ごめんなさい、あれこれいじってるうちに自己解決しました。
    ゴミコメント増やしてすいません

  6. ヴァリウム男爵 Says:

    MT4i の件ですがひょっとして、SQLite の Database 指定に相対パスを指定していたということはないですか?絶対パスで指定しないと、僕のところでは MT4i でエラーになりました。

    BerkeleyDB のときと同じですね。

    何はともあれ、うまくいったようで何よりです。

  7. Irana Says:

    たびたびで申し訳ありませんが教えていただけますでしょうか?

    今回実はさくらインターネットにお引越ししました。
    で、MT4iを設置して、閲覧とコメント投稿は全然問題なく行えるんですけど…
    何故かエントリの新規投稿と編集で500エラーが出ます。
    そして500エラーのくせに何故か保存もリビルドもできています。

    パーミッションも間違えてないし、dbのパスもhomeからの絶対パスだし、もー何がなんだか・・・
    可能性があるとすれば、さくらだと拡張子.phpは実行権限与えてやらないと表示され無いことくらいですが、
    それだってmt.cfg(mt-config.cgi)を編集済みでパーミッションおかしくないし…

    エラーが出ても反映されてはいるのでいいっちゃいいんですけど、どうにも気持ちが悪くて。
    太鉄さんの方にも一応質問してはいますが、色々とお忙しそうなので、ヴァリウム男爵さん、もし何かおわかりでしたら教えていただけないでしょうか…?

  8. ヴァリウム男爵 Says:

    特にうちでは問題でてません。パスは home から、というか / からなんですよね?(例えば /home/hoge/pblic_html/… みたいな)

    でも、保存までは正常にできるとのことなので、あまり基本的なミスでもないような。MT3.2特有の問題なのかな。

    MT4i は公開エントリー投稿/編集後に、インデックステンプレートのリビルド、個別エントリーテンプレートのリビルド、更新Pingの送信という処理をしていますので、その中のどれかでこけてる可能性はあると思います。

    何か分かったらお知らせしたいと思いますが、うちでは発生していない問題なので難しいかも。あまり期待はしないでくださいね(^^;

  9. Irana Says:

    そうです、/home/user/www/です(さくらの書き方)

    ロリポ+3.2+MySQLの時は、MySQLのおかげで500エラー出まくってたんですよね。それでも500エラーが出ないこともあったので、これはほぼタイムアウトなのは間違いないです。
    あと、ロリポ+3.2+SQLiteでの投稿もセーフでした。

    どうもさくら側の問題っぽいです。
    とにかく500エラーが出るのがすごく早いんですよね。
    そのくせリビルドも保存もできている…
    ちなみに下書き時はエラー出ていないので、リビルドで引っかかってるのは確実なんですが。

    up-rebuild.cgiはエラー起こしてないので、インデックステンプレートのリビルドは問題いと思います。
    なので、個別エントリーのリビルドか更新pingの送信のどちらかと言う可能性が高そうです。
    もう少しあれこれいじくってみます。。。

    あとは考えられるのはドメインの浸透が終わりきってなくて、前のサーバーのMTとこっちのサーバーのMTを行ったりきたりしてる可能性も・・・
    いや、/homeから書いてるんだから違うしなぁ…

Leave a Reply