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