MroongaつかってたらMySQLが応答しなくなってドハマリしまくったので

シルバーウィークにMroongaをつかったプログラムをごにょごにょ触ってたのですが、どうも僕がさわるとよく問題が起きます。
僕自身はMroongaのことを好きなのに、Mroongaは僕のことが嫌いみたいで、なかなか両想いになれません。

主な問題は

・エンジンをMroongaにしているテーブルにカラムを追加しようとするとMySQLが応答しなくなることがある
・前項の現象以降、再起動しても対象のテーブルやDBの操作が一切できなくなる
・phpmyadminでみると特定のカラムが「使用中」になったまま参照できなくなる
※ちなみに環境はMacのMavericksです(Yosemite怖くて入れれてないです)

この手の現象を色んなキーワード(「Mroonga カラム 追加できない」とか)で調べて回ったのですが、いかんせん情報が出なくてドハマリしました。

Mroongaは高速な全文検索とかベクターカラムを利用するために大変重宝しているので、この手の不具合にはさくっと対応できないと、何かと工数がかかっちゃうので必死こいて調べました。


「そもそも応答しなくなるような状態でむりくり使ってんじゃないよ。リストアしなよ」

という意見は尊重するとして、実際問題が起きると「DB応答しなくなるし、削除もできないしどうすりゃいいのよ」ってなるので、僕がゴニョゴニョやって体得した対応方法をまとめます。
※ただし、応答しなくなった場合のバックアップ方法はしりません。テーブルの構造を変えるときは必ずバックアップを取ろう!

ロックされているだけの場合
テーブルがロックされているだけの場合があります。
その場合は、
1,一旦再起動(OSごとやってしまいましょう)
2,mysql -u root -p とかやってMySQLへログイン
3,select mroonga_command(‘clearlock’); と叩く
4,応答するようになるか様子をみる
(これで直るならデータは帰ってくることが多いのでハッピー)

これでだめなら「同じ名前のDB立てなおそう」って思うかもしれません。
僕はこの発想のせいでドハマリしました。
はい、DBやテーブルを消せません。

実はこの場合の消せない理由がよくわかってないんですが、なんせクエリを打った瞬間から一切の応答がなくなります。
なので、

どうしても応答しなくなる場合
もうぶっ潰してもいいから作り直したい!って時に
1,一旦再起動(OSごとやってしまいましょう)
2,mysql -u root -p とかやってMySQLへログイン
3,一応、select mroonga_command(‘clearlock’); と叩く
4,UNINSTALL PLUGIN mroonga; とやって ひとまずMroongaプラグインをMySQLからはずす
5,MySQLを再起動
6,drop database DB名;とかやって、DBを消す
7,MySQLのディレクトリにMroongaのファイルの残骸があるので削除する
※この工程をやらないと同じ名前で作った時に応答しなくなる
※ファイル名は DB名.mrn とか DB名.mrn.001以下略 など。
8,INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'; とかやってMroongaのプラグインをインストールしなおす
9,MySQLを再起動

とくに7番を実施してないことにより死ぬほどハマりました。
知らないと、

・仕方なくDB名を変えてみる
・そのときはうまくいく
・何かの拍子にうごかなくなる
・うっかり前に使ったDB名で作りなおそうとする
・何をやっても応答しないものと勘違いする
・不貞寝 ← イマココ

みたいなエントリをすることになります。


僕がやった対処はこんな感じですが、もっとイケてる対応方法があればどなたか教えて下さい!

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.