Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

mroonga(groonga)の.mrnファイルがlock failedとなった場合の復旧方法 #mroonga

$
0
0

何らかの原因によりlock failedとなり、mroongaのテーブルを含むデータベースの
操作が出来なくなったときの復旧方法を紹介します。

復旧方法

mroonga豆知識。テーブルがロック状態になり何も出来なくなった時は "groonga ./データファイル.mrn" で開いて、 clearlockを叩くと復活する。

— Y.Kentaro (@yoshi_ken) May 9, 2013

これだけだと若干不親切なので、状況含めて説明します。

drop tableコマンドを発行した所、lock待ちとなる

mysql> show processlist;
+----+------+-----------+------+---------+------+-------------+------------------------+
| Id | User | Host      | db   | Command | Time | State       | Info                   |
+----+------+-----------+------+---------+------+-------------+------------------------+
|  1 | root | localhost | NULL | Query   |   15 | System lock | drop database wikipedia |
|  2 | root | localhost | NULL | Query   |    0 | init        | show processlist       |
+----+------+-----------+------+---------+------+-------------+------------------------+
2 rows in set (0.00 sec)

その後は、MySQLは起ち上がるものの、エラーが起きたそのデータベースに対して drop databaseも発行できない状態(System lockとなる)になります。

/var/lib/mysql/groonga.log

このファイルを見ると、確かにロック競合が起きていることが分かります。

$ sudo tail /var/lib/mysql/groonga.log
2013-05-08 19:10:01.010939|n|1d436700|io(wikipedia.mrn) collisions(1000/119): lock failed 1000 times
2013-05-08 19:28:58.470488|n|1d436700|io(wikipedia.mrn) collisions(1000000/119)

手動復旧

この状況になったら、groongaコマンドを用いた手動復旧オペレーションが必要です。
なお、groongaコマンドを使いますので、必要に応じてyum install groongaを行ってください。

まずはMySQLのデータディレクトリへ移動し、groonga データベース名.mrnというコマンドでファイルを開きます。
次に、clearlockと打ち込みEnterを押しましょう。
行末にtrueと書かれた応答が返れば成功です。

$ cd /var/lib/mysql
$ sudo groonga ./wikipedia.mrn
> clearlock
[[0,1368059582.565,0.113549709320068],true]
> quit
[[0,1368059584.49693,3.60012054443359e-05],true]

最後に、MySQLの再起動を行うことをオススメします。
お疲れ様でした。

あわせて読みたい

http://groonga.org/ja/docs/reference/commands/clearlock.html


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>