ムーバブルタイプ(MovableType)

MT6で使っているSQliteというデータベースが整合性エラーになってしまった

この記事は約3分で読めます。

SQLITEのデータベースエラー MT6の管理画面で「ブログ一覧」などが見られないというエラーを解決するためデータベースを調べてみた。現在、MT6はMYSQLではなくSQliteで運用し始めた。MT6スタート数日後の9/15は23MB程度のファイルだったが9/20には82MBにまでふくれあがっていた。数日でこれほどデータ量が増えるはずはないのでこれはおかしい。データベースをFTPでダウンロードして「tksqlite.exe」を使って整合性チェックを行った。すると「database disk image is malformed PRAGMA integrity_check;」というエラーメッセージがでた。データベース内部でなんらかの矛盾が起きておりこのまま使い続けるには問題がありそうである。

SQLITEのデータベースエラーメッセージ

このエラーの原因と、先日から起きている「ブログ一覧」を表示するとエラーになるということの因果関係を調べてみた。まず、バックアップをとってあった数日前のSQliteのデータベース「mtdb.db」をtksqlite.exeで調べた。データベースの整合性エラーはでなかった。そこでこの「mtdb.db」をFTPでサーバにアップロードしMT6でログインしなおしてみた。しかし、「ブログ一覧」を見ようとするとエラーが起こる。

念のため、新規で「mtdb.db」を作成し、記事が空の状態で「ブログ一覧」をクリックしてもエラーは起きた。

となると、「database disk image is malformed PRAGMA integrity_check;」というエラーは、「ブログ一覧」を見ようとするとエラーの原因というわけではなさそうだ。新たな問題の発生ということになる。頭が痛い…。

MT6ベータ版とSQliteとの相性が悪いのだろうか。MYSQLに変更すれば問題はなくなるのかもしれないが、再構築速度の早さではSQliteのほうが早いはずなので、できるだけSQliteで運用したい。

いちおう記事は書けるのでこの記事も整合性エラーが起きているデータベースを使ったまま書いている。記事のエキスポートはできるのでテキスト形式でのバックアップもとっておくことにした。シックス・アパート社にエラーとバグの報告を行い様子を見ることにする。

MT6ベータ版のサポートからSQliteはサポート外との連絡あり、自力解決を図る

翌日になってMT6ベータ版のサポートから「SQliteはサポート外」であるという連絡があった。確認不足であったが、MT5以降はずっと「SQliteはサポート外」で、MT6でもそれは同じだということだった。調べてみると、たしかにそうで、MT5でも小粋空間の荒木さんはSQliteでの動作確認をしていた。

となると、この問題がSQliteに起因するなら自力で解決しなければならなき可能性が高くなった。そこで、7月にMT6導入時からの経緯を振り返って対策を検討した。

まず、MT6のベータ版が7/10に発表になり、そのさいにダウンロードした「MT6ベータ版」を使っていたときは、SQliteでの不具合はなかったことを思いだした。いくつかのバグっぽいエラーはあったが自力で修正できていた。そこで、あらためて「tohdamikio.com」にMT6の初期ベータ版を入れなおすことにした。修正済みのMT6ベータ版をFTPでアップロードし、データ部分は昨日まで使用していたmtdb.dbをFTPでアップした。mt-config.cgiを新たな設定に書き直しログインすると、あっさりとエラーがなくなった。

9月22日現在、エラーがでなくなったので、もうしばらくこのまま使い続けることにする。

mt6全再構築

全再構築は34分13秒だった。ちなみに記事数は2973件。途中でインターナルサーバーエラーが出ずに再構築が完了できるようになってほっとひといきだ。