« 消えたコメント-復活しました | メイン | 消えたコメント-レビュー(2) »

2008年01月10日

消えたコメント-レビュー(1)

 いつまでも同じ話題を引っ張るようで恐縮ですが、昨日ご報告させて頂いた“消えたコメント”問題を再検討してみたいと思います。同じような障害に直面した場合、特にMovable Typeをご使用の方の参考になれば幸いです。
 
 なお、使用しているMovable Type、サーバー、障害解決のためのツール等の主な仕様は次の通りです。
 
  Movable Type 3.31-ja
 
  サーバー
   CPU: AMD Athlon 64 3500+
   OS:  不明(Linuxベースと思います)
   Webサーバー: Apache 1.3.37
   DB: MySQL 4.0.27 (コマンド mysqlも同バージョン)
 
  ツール
   DB操作ツール: phpMyAdmin 2.6.1-pl2
   端末エミュレータ: UTF-8対応 TeraTerm Pro 4.56

 
 
 障害発生から解決に至るまでの“あらすじ”を、過去のエントリー順に簡単におさらいしたいと思います。
 
 Ⅰ. サーバー障害発生(エントリー: サーバー障害
 Ⅱ. 原因調査(エントリー: 消えたコメント-ブログの障害調査(1)、および消えたコメント-ブログの障害調査(2)
 Ⅲ. 一部のみ対応(エントリー: 消えたコメント-見切り発車
 Ⅳ. 対応完了(エントリー: 消えたコメント-復活しました
 
 
[ステップ1 状況の確認]
 
 先ず、Ⅰ.で障害発生を認知した段階で、次の3点の不具合を認識しました。
 
 ⅰ. 新規エントリーの投稿が出来ない
    エントリーの投稿に於いてエラー(注1)が発生するため
   (注1) データベースアクセスエラー。下記のエラーメッセージがログに残されている
     “コメントを保存できません: SQLエラーが発生しました: Can't open file: 'mt_comment.MYI'. (errno: 145)”

 
 ⅱ. コメントの投稿が出来ない
    コメントの投稿に於いてエラー(注2)(注3)が発生するため
   (注2) データベースアクセスエラー。下記のエラーメッセージがログに残されている((注1)と同じエラーメッセージ)。
     “コメントを保存できません: SQLエラーが発生しました: Can't open file: 'mt_comment.MYI'. (errno: 145)”

   (注3) 過去ログを見ると、障害発生の初期の段階では上記とは異なるエラーメッセージが残されている。
     “コメントを保存できません: SQLエラーが発生しました: Duplicate entry '62704' for key 1 ”

 
 ⅲ. 過去の全コメントデータが消えた
    コメント数が0(ゼロ)になった
 
 
[ステップ2 状況の分析]
 
 不具合を認識した段階で、ログの分析といくつかの実験をしました。その結果判った不具合の状況を、もう少し詳しくご説明します。
 
 ⅰ.(新規エントリーの投稿が出来ない)につきましては、
  (1) ログに残されているエラーメッセージ(上記(注1))は、コメントテーブルへのアクセスエラーでした。
  (2) 実際に個別エントリーそのものは作成・公開されており、パーマネントリンクのURLを直接指定すれば表示できました。ただしブログのメインページからリンクされていない状態でした。
  (3) Movable Typeのテンプレート(メインページ)のソース(下図-1)を見ると、エントリーの本文および拡張部分(“続きを読む”以降)の次に、そのエントリーにリンク(投稿)されているコメントの件数を表示します。この部分でコメントテーブルにアクセスを試みてエラーとなったものと思われます。
このブログのメインページのテンプレート・ソース
 図-1 このブログのメインページのテンプレート・ソース。赤の下線部分を見るとわかるように、コメント(の投稿)を許可(allow)している場合のみ、この部分(コメント)が処理される。
 
このブログのメインページ
 図-2 このブログのメインページ。“続きを読む "消えたコメント-復活しました"”の下にある“コメント (0)”の部分が、図-1に示した処理に該当する個所である。

 
 ⅱ.(コメントの投稿が出来ない)につきましては、ログに残されたエラーメッセージ(上記(注2))の通りで、これ以上でも以下でもありません。コメントテーブル(mt_comment)へのアクセスに失敗してコメントが保存できなかった、その通りの結果です。
 
 ⅲ.(過去の全コメントデータが消えた)につきましては、不具合ⅰ(エントリー投稿不能)、ⅱ(コメント投稿不能)を認識して調査を開始した直後は、(エントリーの下にある“コメント (2)”等のリンクをクリックして)コメントを読むことが出来ました。
   その後、調査の過程でサイトの再構築(すべて)を実施してしまったことが、最後の一押しだったようです。その後、Movable Typeの管理画面で確認すると“コメント 0”となり、ブログページから見ても各エントリーの下にあるコメントはいずれも“コメント (0)”になってしまいました。
 
 
[ステップ3 原因調査(推論含む)、および解決の方向性の模索]
 
 次のステップでは、ステップ1で収集した情報と、ステップ2の思考をさらに推し進め、原因の特定(情報収集に限界があるため、推論も必要)と解決策の方針を決めました。再び不具合事象毎に説明いたします。
 
 ⅰ.(新規エントリーの投稿が出来ない)につきましては、
   とりあえずの解決策として、「コメントの投稿受付を一時禁止にする」こととしました(もちろんⅱ.と同様に、原因はコメントテーブルにアクセス出来ないことにありますので、最終的にはこの問題を解決しなければなりません)。
 
   上記図-1のリストをご覧いただくと判りますように、エントリーの投稿時にコメントテーブルにアクセスするのは、“MTEntryIfAllowComments”(赤い下線部分)の時、つまり“コメントの投稿受付を許可している時”のみです。したがって、コメントの投稿受付を不可にすればよいのではないかと考えて実験したところ、エントリーの投稿が正常に完了しました(メインページからリンクされました)。
 
 具体的にはMovable Typeの管理画面において、設定 - コメント/トラックバックの順に進み、“投稿を受け付ける条件”を「すべて」から「なし」に変更しました。もちろん、データベースアクセスエラーの解決策が判るまでの暫定的な対策です。
 
 
 ⅱ.(コメントの投稿が出来ない)につきましては、
   これが今回の問題の本命と思います。この件の原因と解決策を見出すためには、サーバー会社とシックス・アパートさんの力を借りることを当初から考えていました。結果的にはサーバー会社への質問、問合せは行なわず、シックス・アパートさんのサポートを受けました。
 
   障害状況を報告後、シックス・アパートさんからすぐ(5時間後。早い!)に回答が来ました。Movable Type側の設定をどうにかするというよりも、サーバー側の対処が必要な問題と思われるということでした。具体的には、“データベースの修復か、または、該当のデータベースの障害発生前の状態へのリストア”をサーバー会社に相談するようにというアドバイスでした。コメントテーブルを再作成すればよいのではないかという直感はありましたが、シックスアパートさんのアドバイスが後押しをしてくれました。
 
   すなわち原因は、データベースのコメントテーブル(mt_comment)が壊れたことである、ということにしました(事実としての確認方法が判らないため、推論を採用しました)。
 
   そして解決策は、コメントテーブル(のみ)を再作成することとしました。具体的には、一旦コメントテーブルを削除(DROP TABLE)して、再作成(CREATE TABLE)します(カッコ内はSQL文)。実験したところ、コメントの投稿が正常に行なえました。実は、障害を認識した翌日(2007年12月12日)には確認出来ていました。しかし、下記の問題ⅲ.(過去の全コメントデータが消えた)の解決方法が見えて来なかったため、コメント投稿の受付再開を延期しておりましたが、いつまでも延ばすわけには行かないと考え12月23日に再開したという次第です(見切り発車)。
 
 
 ⅲ.(過去の全コメントデータが消えた)
   この件に関しましては原因の特定は省略しました(コメントテーブルが壊れたため、中味のデータが全部消えたという程度の解釈としました)。
 
   解決策としては、
   (1) バックアップファイル(最終取得日:2007年10月30日)の中からコメントデータのみを取り出します。
   (2) 取り出したコメントデータを、上記ⅱ.で再作成したコメントテーブル(mt_comment)の中に入れる。
  の2ステップです。具体的な方法としては、直接データベースを操作できるmysqlコマンドや、phpMyAdmin(ブラウザ上で動くGUIベースのデータベース操作ツール)を使って、上記(1)と(2)の操作をするだけです。
 
   解決の方針としてはこれでよく、それほど難しくは無いと考えておりました。ちょっとやってみましたが、上手くいかずしばらく放り投げておくことになってしまいました。最終的に年を越してしまいました(消えたコメント-復活しました)。
 
 
 [ステップ4 対策の実施]につきましては、後日ご報告いたします。
 
 
--- 関連情報 ---
(1) サーバー障害 2007年12月11日 IT屋もりたの今時パソコン日記
(2) 消えたコメント-ブログの障害調査(1) 2007年12月12日 IT屋もりたの今時パソコン日記
(3) 消えたコメント-ブログの障害調査(2) 2007年12月12日 IT屋もりたの今時パソコン日記
(4) 消えたコメント-見切り発車 2007年12月23日 IT屋もりたの今時パソコン日記
(5) 消えたコメント-復活しました 2008年01月08日 IT屋もりたの今時パソコン日記

投稿者 もりた : 2008年01月10日 02:02 このエントリーを含むはてなブックマーク この記事をクリップ!

トラックバック

このエントリーのトラックバックURL:
http://www.imadokipc.com/mt/mt-tb.cgi/783

コメント

コメントしてください




保存しますか?