EC2上にmroongaによって全文検索可能なDBを構築した。

環境

  • amzn-ami-pv-2013.03.1.x86_64-ebs (ami-39b23d38)
  • mysql5.6.13
  • groonga3.06
  • mroonga3.06

mysqlはオフィシャルで配布してるrpmパッケージから。 groonga、mroongaはソースからビルドしてインストールした。

準備

checkinstall

ソースからビルドするものについても、checkinstallでrpm化してインストールする。 64bit版のAMIにcheckinstallをインストールする手順はこちらを参照

MySQLのインストール

オフィシャルで配布されている Linux Generic な rpm をインストール

~ # rpm -ivh http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.13-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
~ # rpm -ivh http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.13-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
~ # rpm -ivh http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.13-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
~ # rpm -ivh http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.13-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/

デフォルトのmy.cnfの場所が/usr/my.cnfになったみたい。 あと、mysql5.6からはデフォルトのsql_modeが変わってよくエラーになるらしいので注意

MeCabのインストール

~ # yum install mecab mecab-devel mecab-ipadic

groongaのインストール

ビルドに必要なライブラリ

要らないものもあるかも

~ # yum install gcc-c++ make automake libtool

インストール

だいたいはここの手順に従った。

~ # cd /usr/local/src/
src # wget http://packages.groonga.org/source/groonga/groonga-3.0.6.tar.gz
src # tar xzf groonga-3.0.6.tar.gz
src # cd groonga-3.0.6
groonga-3.0.6 # ./configure
groonga-3.0.6 # make -j$(grep '^processor' /proc/cpuinfo | wc -l)

んで、make install ではなくて checkinstall でrpmにする。

groonga-3.0.6 # checkinstall

だけどコケる。 checkinstallがmake中に、どうやら必要なディレクトリが作れていない。 試行錯誤の末、以下のディレクトリを作ればビルドできる(と思う)

groonga-3.0.6 # mkdir -p /usr/local/include/groonga/groonga
groonga-3.0.6 # mkdir -p /usr/local/lib/groonga/plugins/tokenizers
groonga-3.0.6 # mkdir -p /usr/local/lib/groonga/plugins/suggest
groonga-3.0.6 # mkdir -p /usr/local/lib/groonga/plugins/table
groonga-3.0.6 # mkdir -p /usr/local/lib/groonga/plugins/query_expanders
groonga-3.0.6 # mkdir -p /usr/local/etc/groonga
groonga-3.0.6 # mkdir -p /usr/local/var/run/groonga
groonga-3.0.6 # mkdir -p /usr/local/var/log/groonga/httpd
groonga-3.0.6 # mkdir -p /usr/local/share/groonga/examples/dictionary/edict
groonga-3.0.6 # mkdir -p /usr/local/share/groonga/examples/dictionary/html/css/smoothness/images
groonga-3.0.6 # mkdir -p /usr/local/share/groonga/images/logo
groonga-3.0.6 # mkdir -p /usr/local/share/doc/groonga/en/html/reference/command
groonga-3.0.6 # mkdir -p /usr/local/share/doc/groonga/en/html/_sources/contribution/development
groonga-3.0.6 # mkdir -p /usr/local/share/doc/groonga/en/html/_sources/reference/api
groonga-3.0.6 # mkdir -p /usr/local/share/doc/groonga/en/html/server/http
groonga-3.0.6 # mkdir -p /usr/local/share/doc/groonga/en/html/_sources/server/http

その上で、checkinstallでrpmを作ってインストール

groonga-3.0.6 # checkinstall
groonga-3.0.6 # rpm -ivh /root/rpmbuild/RPMS/x86_64/groonga-3.0.6-1.x86_64.rpm

mroongaのインストール

手順はほぼこちらの通り

まずはMySQLのソースコードがmroongaのビルドに必要なので落としてくる。

src # wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.13.tar.gz/from/http://cdn.mysql.com/
src # tar xzf mysql-5.6.13.tar.gz

mroongaのソースコードを取得後、ビルドしてインストール。

src # wget http://packages.groonga.org/source/mroonga/mroonga-3.06.tar.gz
src # tar xzf mroonga-3.06.tar.gz
src # cd mroonga-3.06
mroonga-3.06 # ./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig  --with-mysql-source=/usr/local/src/mysql-5.6.13 --with-mysql-config=/usr/bin/mysql_config
mroonga-3.06 # make
mroonga-3.06 # checkinstall

んが、groongaの時と同様に、ディレクトリが作れずこける。 ので、手対応。

mroonga-3.06 # mkdir -p '/usr/local/share/doc/mroonga/en/html/_sources/dev
mroonga-3.06 # mkdir -p '/usr/local/share/doc/mroonga/source/reference'
mroonga-3.06 # checkinstall
mroonga-3.06 # rpm -ivh /root/rpmbuild/RPMS/x86_64/mroonga-3.06-1.x86_64.rpm

MySQL起動後、mroongaをプラグインとしてインストールする。

mysql> INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';
Query OK, 0 rows affected (0.30 sec)

mysql> CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';
Query OK, 0 rows affected (0.00 sec)

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| mroonga            | YES     | CJK-ready fulltext search, column store                        | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.02 sec)