[groonga-dev,01211] Re: MySQLのmroongaテーブル名変更による障害?

Back to archive index

OHTSUKA Soushi ( 大塚 総司 ) so****@ayd*****
2013年 2月 17日 (日) 21:46:38 JST


大塚です。

回答ありがとうございます。

> ログとソースコードの該当するあたりを確認してみたところ、新し
> いテーブル名で対応するgroongaのテーブルが見つけられないと起
> こりそうでした。
> 
> 「対応するgroongaのテーブルはあるけどデータベースが壊れている」
> という場合はgroonga.logのもう少し前の方に「テーブルを開くのに
> 失敗しました」というエラーメッセージが残ってそうです。が、そ
> のようなものはなかったんだろうと思うので、そもそも、対応する
> groongaのテーブルが見つけられないんだろうなぁと思いました。

MySQL上ではテーブルがあるが、groonga上では存在していない、もしくは違う
名称になっていてデータベース自体は恐らく壊れていないと言う事でしょうか。
前回のメールで細かい説明が足りなかったので補足します。

[DB1]
  mroongaテーブルA:障害後利用不可
  mroongaテーブルB:障害後利用不可
  mroongaテーブルC:障害後も利用可能

[DB2]
  mroongaテーブルa:テーブル名を変更したテーブル、障害後利用不可
  mroongaテーブルb:障害後も利用可能
  mroongaテーブルc:障害後も利用可能

[備考]
  ・DB2はDB1のステージング環境なのでテーブル名は同じです。


上記の通り、障害発生後は利用できるテーブルと利用できないテーブルが発生し
ていました。
利用できないテーブルにアクセスすると「invalid table assigned」が発生し
MySQLが再起動しました。

違うDBであるDB1側のmroongaまで影響を受けたのが不思議だなと思っています。
シナリオとして mroongaテーブルa の名称変更が障害の原因と仮定すると、まず
そこで突然のMySQL再起動が発生し、それに巻き込まれて他のテーブルも壊れた感
じでしょうか。
(完全に推測で書いてます…)

> とりあえず、groongaのテーブルが見つけられないときはすぐにエ
> ラー扱いにしてクラッシュはしないようにしました。また、エラー
> メッセージ中にgroongaレベルでのテーブル名も出力するようにし
> たので、それを見ればもしかしたらヒントがみつかるかもしれませ
> ん。

ありがとうございます!
次回リリース時に修正が入っているようでしたら、バージョンアップするように
調整してみます。
もし同じ現象が発生した時にはまたご連絡致します。

> > 取り合えずmroongaのテーブル名変更は怖いので今後は控えようかと思っています。
> すみません。。。

実際にそれが原因と決まっているわけではないのに、こんなことを書いてこちらこそ
申し訳ないです。

> mroonga関連のテーブルがすべて削除されてOKということであれば、
> *.mrnと*.mrn.xxxを手動で削除しても大丈夫です。ただし、その前
> にMySQLレベルでmroonga関連のテーブルをすべて削除してあるか確
> 認してください。MySQLレベルにmroonga関連のテーブルの情報が残っ
> ているとうまくテーブルを作成したりできなくなりそうな気がしま
> す。

情報ありがとうございます。
今後同じ現象が起こったときにすぐに復旧出来るように

・mroonga関連テーブルだけ別途定期ダンプ
・同じ問題が起こったときはmroonga関連テーブルとファイルも全削除後にダンプ
  からリストア
  (ファイル削除はDROP TABLE中に変にMySQLが再起動して残った場合のみ実施)

を考えていたのですが、いけそうな気がします。

///////////////////////////////////////////////////////////////
 [NAME] 大塚 総司 - OTSUKA Soushi
 [Mail] so****@ayd*****

From: Kouhei Sutou <kou****@clear*****>
Subject: [groonga-dev,01210] Re: MySQLのmroongaテーブル名変更による障害?
Date: Sun, 17 Feb 2013 15:23:27 +0900 (JST)

> 須藤です。
> 
> In <20130****@ayd*****>
>   "[groonga-dev,01209] MySQLのmroongaテーブル名変更による障害?" on Sat, 16 Feb 2013 14:32:31 +0900 (JST),
>   OHTSUKA Soushi(大塚 総司) <so****@ayd*****> wrote:
> 
> > 曖昧な情報で申し訳ないのですが、mroongaのテーブル名を変更するとテーブルが
> > 壊れるような事象が発生する可能性はありますでしょうか。
> 
> テーブル名変更機能を入れてからしばらく経ちますが、そういう話
> を聞いたことはなかったです。。。報告されていなかっただけで、
> そういうことがあったのかしら。。。
> 
> > 先日、MySQLがクラッシュする障害が発生しました。
> ...
> > 経緯としては次のような感じです。
> ...
> > [21時頃]
> > ・mroongaのテーブル名変更
> >   (ALTER TABLEのRENAME)
> > 
> > [groonga.log]
> > ------------------------------------------------------------(ここから)
> > 2013-02-15 21:02:33.673759|e|41aef940|invalid table assigned
> > 2013-02-15 21:02:33.682112|e|41aef940|/usr/local/groonga/lib/libgroonga.so.0(grn_table_size+0x26f) [0x2aaad2f6234f]
> ...
> > ------------------------------------------------------------(ここまで)
> > 
> > [MySQLのログ]
> > ------------------------------------------------------------(ここから)
> ...
> > /usr/local/groonga/lib/libgroonga.so.0(grn_obj_path+0x1)[0x2aaad2f58051]
> > /usr/local/mysql-5.5.28/lib/plugin/ha_mroonga.so(_ZN10ha_mroonga38storage_info_variable_data_file_lengthEv+0x2a)[0x2aaad2cf7aea]
> > /usr/local/mysql-5.5.28/lib/plugin/ha_mroonga.so(_ZN10ha_mroonga12storage_infoEj+0x148)[0x2aaad2cf7d88]
> ...
> > ------------------------------------------------------------(ここまで)
> 
> ログとソースコードの該当するあたりを確認してみたところ、新し
> いテーブル名で対応するgroongaのテーブルが見つけられないと起
> こりそうでした。
> 
> 「対応するgroongaのテーブルはあるけどデータベースが壊れている」
> という場合はgroonga.logのもう少し前の方に「テーブルを開くのに
> 失敗しました」というエラーメッセージが残ってそうです。が、そ
> のようなものはなかったんだろうと思うので、そもそも、対応する
> groongaのテーブルが見つけられないんだろうなぁと思いました。
> 
> ただ、どうして見つけられないかはわかりません。。。
> とりあえず、groongaのテーブルが見つけられないときはすぐにエ
> ラー扱いにしてクラッシュはしないようにしました。また、エラー
> メッセージ中にgroongaレベルでのテーブル名も出力するようにし
> たので、それを見ればもしかしたらヒントがみつかるかもしれませ
> ん。
> 
> > 取り合えずmroongaのテーブル名変更は怖いので今後は控えようかと思っています。
> 
> すみません。。。
> 
> > また、別件で質問した方がいいのかもしれませんが、データベースでmroonga関連の
> > テーブルをすべて削除したあと *.mrn や *.mrn.xxx ファイルが残っていたらこれは
> > 手動で削除していいものでしょうか。
> > 実は復旧作業中に別ユーザがmroongaテーブルにリクエスト→MySQLが再起動し、中途
> > 半端にファイルが存在する事態になったため、念のためDB全削除、関連ファイルも全
> > 削除からリストアを行いました。
> 
> mroonga関連のテーブルがすべて削除されてOKということであれば、
> *.mrnと*.mrn.xxxを手動で削除しても大丈夫です。ただし、その前
> にMySQLレベルでmroonga関連のテーブルをすべて削除してあるか確
> 認してください。MySQLレベルにmroonga関連のテーブルの情報が残っ
> ているとうまくテーブルを作成したりできなくなりそうな気がしま
> す。
> 
> 
> *.mrnがgroongaのデータベースのメタデータを管理しているやつで、
> *.mrn.xxxが実データが入っているファイルなのですが、*.mrnは新
> *しいテーブルを作成するときになかったら自動で作られるので手
> *動で消しても大丈夫なのです。
> 
> 
> -- 
> 須藤 功平 <kou****@clear*****>
> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)
> 
> groongaサポート:
>   http://groonga.org/ja/support/
> パッチ採用はじめました:
>   http://www.clear-code.com/recruitment/
> コミットへのコメントサービスはじめました:
>   http://www.clear-code.com/services/commit-comment.html
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev




groonga-dev メーリングリストの案内
Back to archive index