Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

MySQL の INSTALL PLUGIN に失敗する時の処方箋(mroonga-1.20編)

MySQLにストレージプラグインを登録しようとした際、予期せぬエラーが起きる事があります。
mroonga の事例を用いて、その原因と解消法を紹介します。

Case.1: API version for STORAGE ENGINE plugin is too different

mysql> INSTALL PLUGIN groonga SONAME 'ha_groonga.so';
ERROR 1126 (HY000): Can't open shared library 'ha_groonga.so' (errno: 0 API version for STORAGE ENGINE plugin is too different)

原因:異なる(おそらく古い)MySQL向けにコンパイルされたプラグインMySQLに読み込ませた事によるエラーです。
解決法:そのプラグインが推奨するMySQLのバージョンを利用するか、プラグインを再コンパイルしましょう。

Case.2: errno: 13 undefined symbol: ○○○

mysql> INSTALL PLUGIN groonga SONAME 'ha_groonga.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/ha_groonga.so' (errno: 13 undefined symbol: _db_pargs_)

原因:Case.1と同様、組み合わせの不一致によるものです。
解決法:そのプラグインが推奨するMySQLのバージョンを利用するか、プラグインを再コンパイルしましょう。
mroongaに限って言えば、groonga-repositoryにて再配布されているMySQLrpmをを使わずに、remi等の外部リポジトリを利用してインストールすると、このエラーが起きます。
mysql-groonga-0.4.2で発生していたエラーを引用しました

Case.3: Can't find symbol '○○○' in library

mysql> INSTALL PLUGIN groonga SONAME 'ha_mroonga.so';
ERROR 1127 (HY000): Can't find symbol 'groonga' in library

原因:プラグイン名の指定を間違えてます。
解決法:.soファイルに対応した名前を用いて下さい。

Case.4: Duplicate entry '○○○' for key 'PRIMARY'

mysql> INSTALL PLUGIN groonga SONAME 'ha_groonga.so';
ERROR 1062 (23000): Duplicate entry 'mroonga' for key 'PRIMARY'

原因:プラグインの管理テーブル(mysql.plugin)に不整合が起きています。
解決法:該当テーブルの調整を行う必要があります。少々手間が掛かるため、次の項にて解説します。

Case.4 の解決法

Case.4のMySQLプラグイン管理テーブルに不整合が発生した場合の解決法を紹介します。
実はこちら、mroonga-1.2.0のリリースノートに以下の気になる事象が記載されていたので、意図的に不整合を起こし、復旧を行った記録です。
> 今のmroongaのRPMの作りがあまりよくなくて"yum remove"を忘れるとプラグイン管理テーブル(?)が壊れてしまいます。
> http://mroonga.github.com/ja/blog/2012/01/29/release.html


さて、順を追って見てみましょう。

続きを読む