Quantcast
Channel: Hatak::Techlog » MySQL
Viewing all articles
Browse latest Browse all 2

Homebrew で mroonga ストレージエンジンを入れる

$
0
0

ローカルマシン (MaxOSX 10.8.2) に MySQL 5.5 + mroonga の環境を構築してたのですが、いろいろ嵌まったのでメモしておきます。

MeCab

mroonga で TokenMecab トークナイザーを利用するためには MeCab が必要です。 Homebrew で IPA 辞書と合わせてインストールします。

[code gutter="false" toolbar="false"] $ brew install mecab mecab-ipadic $ mecab -D filename: /usr/local/Cellar/mecab/0.994/lib/mecab/dic/ipadic/sys.dic version: 102 charset: utf8 type: 0 size: 392126 left size: 1316 right size: 1316 $ mecab 今日は雨です 今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー は 助詞,係助詞,*,*,*,*,は,ハ,ワ 雨 名詞,一般,*,*,*,*,雨,アメ,アメ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス EOS [/code]

brew で mecab-ipadic 入れるとデフォルトで UTF-8 になるようになっています。mecab コマンドでインタラクティブに形態素解析してみて、文字化けせずに出力されれば問題なしです。

もし、文字化けしてる場合は Homebrew 周りのどこかに問題があります。brew doctor などで調べていきます。

[code gutter="false" toolbar="false"] $ brew unlink mecab mecab-ipadic $ brew uninstall mecab mecab-ipadic $ brew doctor [/code]

私の場合、10.8 にアップデートする以前に Homebrew で入れた libiconv が中途半端に残ってたことでおかしくなっていたようでした。

groonga

MeCab の次は groonga をインストールします。

[code gutter="false" toolbar="false"] $ brew install groonga $ groonga --version groonga 2.0.7 [darwin12.2.0,x86_64,utf8,match-escalation-threshold=0,nfkc,msgpack,zlib,lzo,kqueue] configure options: [/code]

インストール後にチェックをして、TokenMecab が使えるか確認します。 mecab と書かれていない場合は使えません。groonga の configure オプションでは mecab はデフォルト有効と書かれており、mecab-config を自動で探してくれることになっているのですが、パスが通ってないなどがあるのかもしれません。 直接 brew edit で Fomula を書き換えて再度インストールしてしまいます。

[diff toolbar="false"] diff –git a/Library/Formula/groonga.rb b/Library/Formula/groonga.rb index 1c4e8cf..45a7a2b 100644 — a/Library/Formula/groonga.rb +++ b/Library/Formula/groonga.rb @@ -8,9 +8,11 @@ class Groonga :build depends_on ‘pcre’ depends_on ‘msgpack’ + depends_on ‘mecab’ + depends_on ‘mecab-ipadic’ def install - system “./configure”, “–prefix=#{prefix}”, “–with-zlib” + system “./configure”, “–prefix=#{prefix}”, “–with-zlib”, “–with-mecab”, “–with-mecab-config=/usr/local/bin/mecab-config” system “make install” end end [/diff]
[code gutter="false" toolbar="false"] $ brew install groonga $ groonga --version groonga 2.0.7 [darwin12.2.0,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,msgpack,zlib,lzo,kqueue] configure options: [/code]

mroonga

次は mroonga をインストールします。Homebrew には内包されていませんが、mroonga のリポジトリに Fomula があるのでこちらを使います。

[code gutter="false" toolbar="false"] $ brew install https://raw.github.com/mroonga/Homebrew/master/mroonga.rb --use-Homebrew-mysql [/code]

もし、MySQL を Homebrew で入れていない場合 (オフィシャルバイナリを利用している場合など) は、同一バージョンのソースを別途ダウンロードして引数に渡します。また、パーミッションの関係で最後の make install で失敗するので、plugin ディレクトリの所有グループを変更してパーミッションも変えておきます。

[code gutter="false" toolbar="false"] $ sudo chgrp staff /usr/local/mysql/lib/plugin $ sudo chmod g+w /usr/local/mysql/lib/plugin $ brew install https://raw.github.com/mroonga/Homebrew/master/mroonga.rb --with-mysql-source=/usr/local/src/mysql-5.5.28 --with-mysql-config=/usr/local/mysql/bin/mysql_config [/code]

嵌まりながら MySQL を Homebrew 管理とオフィシャルバイナリの両方で試してみたのですが、基本的には Homebrew で揃えた方が便利かなと思いました。

オフィシャルバイナリの特徴をまとめてみるとこんな感じです。

  • 長所
    • OS の設定画面で起動/停止、あるいは自動起動設定が行える
    • インストールウィザードが付属しているためインストールが容易
  • 短所
    • 言語バインディングを利用するときに DYLD_LIBRARY_PATH にパスが通っていないとエラーになることがある
      • 逆にパスを通していると Homebrew でエラーになることがある
    • データやログなどのパーミッションがユーザ権限ではなく root になってしまう
    • 起動/停止を行う際にパスワードが必要なのが面倒

個人的には、複数のユーザで利用している mac でユーザ共通に自動起動させたい(もしくはどうしてもオフィシャルバイナリを使いたい)という条件でなければ Homebrew で良いのかなと思いました。

動作確認

MySQL Server が起動していれば、mroonga の Fomula の中でプラグインと関数の追加も行われています。停止していた場合は起動後に追加のコマンドを入力します。

[code gutter="false" toolbar="false"] $ mysql -uroot -e 'INSTALL PLUGIN mroonga SONAME "ha_mroonga.so"; CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME "ha_mroonga.so"; CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME "ha_mroonga.so";' [/code]

これで mroonga ストレージエンジンが使えるようになります。

[sql gutter="false" toolbar="false"] root@localhost[test]> SHOW ENGINES; +——————–+———+—————————————————————-+————–+——+————+ | Engine | Support | Comment | Transactions | XA | Savepoints | +——————–+———+—————————————————————-+————–+——+————+ | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MRG_MYISAM | YES | Collection of identical MyISAM tables | 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 | | CSV | YES | CSV storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | +——————–+———+—————————————————————-+————–+——+————+ 10 rows in set (0.01 sec) root@localhost[test]> SHOW PLUGINS; +————————–+———-+——————–+—————+———+ | Name | Status | Type | Library | License | +————————–+———-+——————–+—————+———+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | mroonga | ACTIVE | STORAGE ENGINE | ha_mroonga.so | GPL | +————————–+———-+——————–+—————+———+ 24 rows in set (0.01 sec) root@localhost[test]> CREATE TABLE diaries ( -> id INT PRIMARY KEY AUTO_INCREMENT, -> content VARCHAR(255), -> FULLTEXT INDEX (content) COMMENT ‘PARSER “TokenMecab”‘ -> ) ENGINE = mroonga COMMENT = ‘engine “innodb”‘ DEFAULT CHARSET utf8; Query OK, 0 rows affected (0.50 sec) root@localhost[test]> SHOW CREATE TABLE diaries; +———+——————————————————————————————————————————————————————————————————————————————————————+ | Table | Create Table | +———+——————————————————————————————————————————————————————————————————————————————————————+ | diaries | CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `content` (`content`) COMMENT ‘PARSER “TokenMecab”‘ ) ENGINE=mroonga DEFAULT CHARSET=utf8 COMMENT=’engine “innodb”‘ | +———+——————————————————————————————————————————————————————————————————————————————————————+ 1 row in set (0.00 sec) [/sql]

warning がでなければ問題なく動作しています。念のため mysql.err や groonga.log といったログにも目を通しておきます。

これで mroonga が使えるようになりました。使ってみた印象としては、文節を考慮してくれる高速な LIKE というイメージです。ちょっとした全文検索であれば、手軽に使えるレベルで良いかと思いました。


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images