てきとう

ワーワーゆうとります

EC2にmroonga入れるよー

前提

  • サーバーはAmazon EC2(micro)だよ
  • MySQLで日本語全文検索したいよ
  • Alminium入れてるからMySQLとか勝手によろしくされてるのでMySQL触りたくないよ
  • MySQLのリコンパイルとかはなるべく勘弁だよ

確認


さよならsenna
昔にFULLTEXTやった時はmecab+senna(tritonn)だったけど、今はsennaの後続としてgroongaを使って
MySQL+groonga(+mecab)のmroongaっていうのをやるといいぞ、と。
sennaだとmysqlのリコンパイルとかあるけど mroongaはプラグインでできるみたいだし採用。


yumでgroonga、mecabmecab辞書、groonga-devel入れる
mecabはgroongaについて勝手にインストールされます。pkgconfigなかったらそれもyumでインストール。

# yumのrepoにアレする
$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
# groonga.repoのbaseurlのreleasedserver部分を6に変更
$ sudo vim /etc/yum.repos.d/groonga.repo
# repo読み込み
$ yum makecache
# あとはインストールしていく
$ sudo yum -y install groonga
$ sudo yum -y install mecab-ipadic
$ sudo yum -y install groonga-devel

mroongaを入れる

  • mroongaのソースをゲットだよ

yumで入れられなくもないみたいだけど挫折したからソースからいく。とりあえず1.11を入れるよ。

$ cd tmp
$ wget https://github.com/downloads/mroonga/mroonga/mroonga-1.11.tar.gz
$ tar zxvf mroonga-1.11.tar.gz 
  • configure時になぜかmysqlのソースを要求されるので使用中のmysqlのソースをゲットしておくよ
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.29.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/
$ tar zxvf mysql-5.5.29.tar.gz 
  • おまじないとしてsphinxをぶっこむ

途中でgithubからsphinxをpullしてきてる部分があるんですけど、もうそのgithubがお亡くなりになっているみたいでエラーでるのでmroonga/doc以下にソースをぶち込んでおこうね

$ wget http://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.3.tar.gz#md5=8f55a6d4f87fc6d528120c5d1f983e98
http://pypi.python.org/pypi/Sphinx#downloads
$ cd mroonga-1.11
$ sudo mkdir doc/sphinx
$ tar zxvf /tmp/Sphinx-1.1.3.tar.gz
$ sudo mv /tmp/Sphinx-1.1.3/* /tmp/mroonga-1.11/doc/sphinx
  • いよいよconfigureかけようね

with-mysql-sourceにDLしてきたmysqlのソースを、with-mysql-configにmysql_configの場所を指定

$ ./configure --with-mysql-source=/tmp/mysql-5.5.29 --with-mysql-config=/usr/bin/mysql_config --with-default-parser=TokenMecab

終わったらmakeしようね。

makeでエラーです

/tmp/mysql-5.5.29/include/probes_mysql.h:24:33: fatal error: probes_mysql_dtrace.h: そのようなファイルやディレクトリはありません
compilation terminated.

ワッザヘール

  • つまづいているIF文を修正
$ sudo vim /tmp/mysql-5.5.29/include/probes_mysql.h

-#if defined(HAVE_DTRACE) && !defined(DISABLE_DTRACE)
-#include "probes_mysql_dtrace.h"
-#else
 #include "probes_mysql_nodtrace.h" 
-#endif
  • 気を取り直してmake
$ make 
$ sudo make install


mysqlでプラグインを読み込む
makeとかつつがなく終わったらmysqlにログインして

install plugin groonga soname 'ha_groonga.so';


プラグイン読み込みでエラーです

ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_groonga.so' (errno: 2 /usr/lib64/mysql/plugin/ha_groonga.so: undefined symbol: my_pthread_fastmutex_init)

  • ha_groonga.soがmysql5.5.29との互換性がない

えっ、mroongaのバージョン低すぎ?と思ってmroonga3.0を入れてみたけど、そーゆー問題じゃないらしい。
disable-fast-mutexesつけてリコンパイルする。

$ ./configure --with-mysql-source=/tmp/mysql-5.5.29 --with-mysql-config=/usr/bin/mysql_config --with-default-parser=TokenMecab --disable-fast-mutexes
$ make
$ sudo make install

プラグイン読み込みでまたエラーです

ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_groonga.so' (errno: 2 /usr/lib64/mysql/plugin/ha_groonga.so: undefined symbol: get_charset)
)

  • なんかMySQLにパッチ当てなきゃならないそうなので
$ wget http://rpms.famillecollet.com/SRPMS/mysql-5.5.28-3.remi.src.rpm
$ rpm2cpio mysql-5.5.29-1.remi.src.rpm | cpio -id
$ ls mysql-dubious-exports.patch 
$ cd /usr/bin/
$ patch -p1 < /tmp/mysql-dubious-exports.patch
  • 当てたのでまたconfigure
$ cd /tmp/mroonga-1.11
$ ./configure --with-mysql-source=/tmp/mysql-5.5.29 --with-mysql-config=/usr/bin/mysql_config --with-default-parser=TokenMecab --disable-fast-mutexes
$ make
$ make install
$ sudo make install
  • 今度こそプラグイン読め
install plugin groonga soname 'ha_groonga.so';
show engines;
Engine Support Comment Transactions XA Savepoints
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
CSV YES CSV storage engine NO NO NO
MyISAM YES MyISAM storage engine NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
groonga YES CJK-ready fulltext search, column store NO NO NO
FEDERATED NO Federated MySQL storage engine NULL NULL NULL
PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
ARCHIVE YES Archive storage engine NO NO NO

勝った