JaGraプロフェッショナルDTP&Webスクール スキルアップブログ

JaGraプロフェッショナルDTP&Webスクールの講師とスタッフが綴る、日々感じたさまざまなできごとやお役立ち情報!

Movable Typeトラブルその1:データベースが壊れた!?

スタッフのAです。
今回は、自分自身が体験したWebのトラブルとその対処について、記事でご報告したいと思います。

 

実は、一ヶ月以上前から先日まで、こちらのブログで使用しているMovable Typeが挙動不審で、復旧に追われていました。
管理画面にアクセスし、何か操作しようとするたびにログアウトしてしまい、ログインログアウトを繰り返すという現象が起こっていたのです。

原因を調べていくと、どうもMovable Type本体ではなく、データベースのMySQLにある「mt_session」というテーブルが壊れていて、このテーブルを修復することでログイン障害が解消される可能性があるとの情報を入手しました。

MySQLレンタルサーバーから提供されているものを利用しているのですが、今まで一度も設定を変更したことはなく、恐る恐るレンタルサーバーのマニュアルを参照しつつ、「PhpMyAdmin」という管理ツールにログインして「mt_session」テーブルを修復してみたのですが、「修復されました」とのメッセージは出ず、修復できずに失敗した模様*1
仕方なく、次の手段として一度「mt_session」テーブルを削除して再度インポートするという作業を試みたところ、無事ログイン障害が起こらなくなりました!

...と、喜んだのもつかの間。

Movable Typeの管理画面で一通りの作業を終えてログアウトし、次の日にログインしたところ、例のログイン障害が再発してしまったのです。
仕方なく、また「PhpMyAdmin」にログインして「mt_session」を削除しインポートしてみると一瞬直るのですが、またまた再発という現象が続いていました。

これでは記事がアップできない...。
次に考えた策は、Movable Type最新バージョンへのアップグレードです。
こちらも設定ファイルをFTPでアップロードし、mt.cgiにアクセスすると自動的にアップグレードが始まるところまで順調だったのですが、アップデートの途中でエラーが起こって先に進めなくなってしまいました。

英語で表示されたエラー原因を読んでみると...「failed to execute statement CREATE TABLE mt_○○」
どうやら、またまたMySQLのテーブルに問題が発生した模様。
新しいテーブルを作成しようとしたけど、アクセスが拒否されて作れませんでした的な内容でした。
この件についてもいろいろ調べて、見よう見真似でMySQLのアクセス権限を直すコマンドを試してみたりしたのですが、効果なし。

それで、もう一度レンタルサーバーMySQLのマニュアルを読んでいたのですが、とある記述を目にした瞬間、ひらめくものがありました。

「データベースの容量がオーバーすると、正常に動作しないことがある」と...。

調べてみると、Movable Typeで使用していたデータベースは見事に容量オーバーしていました。
そんなデータをたくさん使用しているつもりはなかったので、どうして?と、各テーブルの容量をチェックすると、「mt_log」と「mt_comment」のテーブルのデータだけ飛び抜けて容量が肥大化していたのです!
「mt_log」の中身を確認すると、今までの操作ログが記録されたものなので、こちらはデータを「空」にしました。
「mt_comment」は記事に対するコメント履歴でした。
実は数ヶ月前からスパムコメントが増えて、Movable Typeの管理画面から削除はしていたのですが、MySQLにはデータが残っていたようです。
こちらも、スパムはすべて削除したところ、だいぶ容量を減らすことができました。

さて、ここまでやって、再度Movable Typeの管理画面にアクセスし、アップグレードを実行してみると...。

やったーーー!!成功です!ものの数秒でアップグレードが完了しました。
ログイン障害も解消され、「PhpMyAdmin」で試しても一向に実行できなかった「mt_session」のテーブル修復も問題なく実行できるようになりました。

...というわけで、今回のMovable Typeのログイン障害は、「MySQLのデータベースの容量オーバー」というトホホなオチですが...。
同じ現象に陥って困っている方の参考になればと思い、記事にしてみました。

それにしても、データベースの中身は滅多なことではいじりたくないですね。
こちらに記述した操作を試される場合も、自己責任で慎重に行ってください!

*1:+_+