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にて再配布されているMySQLのrpmをを使わずに、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
さて、順を追って見てみましょう。