EC2にmroonga入れるよー
前提
- サーバーはAmazon EC2(micro)だよ
- MySQLで日本語全文検索したいよ
- Alminium入れてるからMySQLとか勝手によろしくされてるのでMySQL触りたくないよ
- MySQLのリコンパイルとかはなるべく勘弁だよ
確認
- MySQL Ver.5.5.29
さよならsenna
昔にFULLTEXTやった時はmecab+senna(tritonn)だったけど、今はsennaの後続としてgroongaを使って
MySQL+groonga(+mecab)のmroongaっていうのをやるといいぞ、と。
sennaだとmysqlのリコンパイルとかあるけど mroongaはプラグインでできるみたいだし採用。
yumでgroonga、mecab、mecab辞書、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
$ 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
勝った
それは私のおいなりさんだ
変態仮面が実写映画化ということで、めでたいですね。
個人的に主演は小栗旬さんか堂本光一さんにやってもらいたかったですが、
予告を見る限りでは、主演の鈴木さんは長身に筋肉質な体というまさに狂介君な凄くいい肉体で、期待できるのではないかと思います。楽しみです。
子供の頃大好きなマンガでしたが、まさかこんな形で大人になってから変態仮面と再会できるなんて思っていませんでした。
うちのコミックス版は引越しの時になくしてコンビニ版しか持っていないのですが、今は文庫版が出ていますね。
HENTAI KAMEN 全5巻セット (集英社-コミック版)
- 作者: あんど慶周
- 出版社/メーカー: 集英社
- 発売日: 2012/02/01
- メディア: 文庫
- クリック: 9回
- この商品を含むブログを見る
これですね。
4月公開を待つ間に、久しぶりに一気に読みたくなったのでこのセットを買ってみたのですが
えっ?
「発送ラベルを直接商品の外装パッケージに」
これに?そのまま?ラベルを?
万が一在宅中に届いても、受け取りは全力で居留守使いたいと思います。
snapshotからの復元をManagement Consoleでやる
みんなEC2やってんの?どうなの?巻いてる?パスタ巻いてる?
あーもうやだこのインスタンス。あの頃に戻りたい。そんな時の手段です。
snapshotを取っておけば簡単に戻れます。
- snapshotをとっておく
やれmysql入れただのredmine入れただの面倒な作業が完了したら記念にsnapshotをとっておきましょう。
あとで「my.cnfいじってたらmysql.sockが消えたんですけどwwwおっwwwwおっwwww」みたいになっても(実話)snapshotから復元できます。失敗は失敗として、またそこから始めてしまえばいいんです。
「今から始めてみればいいじゃない」って嵐も言ってました。
ところで、ひみつの嵐ちゃん3月終了って本当ですか?寂しいですね。
- snapshotからvolumeを作る
作る時、availavility zoneとか気をつけてください。
- 新しいインスタンスを作って、stopをかける
- snapshotから作ったvolumeを、インスタンスにattachする
deviceはデフォルトだと/dev/sdfになっていますので各自あわせてください。
特になにも考えずにこのままattachしてしまって
「for instanceId. Instance does not have a volume attached at root (/dev/sda1)」
って怒られました。つけ間違えたらdetachして正しいdeviceに書き直してattachすればよしです。
そんでこの前友人宅でアラフェスのDVD見たんですけど、J(松本くん)のソロの後ろであんまり踊れていない櫻井くんが凄くよかったです。
しかもその曲が終わったあと「踊れたー!」って満足そうに言ってて本当にかわいかったです。
- 出版社/メーカー: ジェイ・ストーム
- 発売日: 2012/12/26
- メディア: DVD
- 購入: 7人 クリック: 23回
- この商品を含むブログ (5件) を見る
↑嵐の商品紹介貼ってもジャケット写真じゃないからあんまおもしろくないわね。
あと他のDVDもちょっと見たんだけど「間奏中にセットの噴水をジャンプしようとして越えられずにズボンの股を濡らす櫻井くんとそれを見て歌えなくなるほど爆笑する二宮くん」もすばらしかったです。
あー嵐入りたい。
mySQLのLEFT JOIN時にONに条件を持たせるよー
たとえば
- tbl_a
id | tel | address |
1 | 03-1111-1111 | 東京都品川区 |
2 | 03-22222-222 | 東京都目黒区 |
- tbl_b
id | tel | name |
1 | 0322222222 | 安田 |
2 | 0311111111 | 高橋 |
みたいなよくわからないテーブルがあります。ここから名前と電話と住所を取り出したいのでJOINします。
これ電話番号でJOINしたいけどAにはハイフン入ってるなー。
SELECT a.address, a.tel, b.name FROM tbl_a AS a LEFT JOIN tbl_b AS b ON FIND_IN_SET(b.tel, REPLACE(a.tel,'-',''))
みんな大好きfind_in_setで解決したね。よかったね。
PHPのconfigure時にwith-pdo-mysqlしたらエラーで困った
前提
- Mac OSX(Macportsで5.3、手動で5.1が入っているのを用途に合わせて設定ファイルで切り替えている)
- そこの切り替え要因に手動でPHP5.2.13を入れたい
- MySQLを使いたいのでオプションに--with-pdo-mysqlを指定する
configureする(本当はもっと色々オプションつけてるけどとりあえず主要なのだけ)
sudo ./configure --prefix=/usr/local/lib/php-5.2.13 --with-apxs2=/opt/local/apache2/bin/apxs --enable-pdo --with-pdo-mysql=/opt/local
エラー出る
configure: error: Cannot find MySQL header files under /opt/local/. Note that the MySQL client library is not bundled anymore!
ヘッダーファイルが見つからないよ、と。
そもそも--with-pdo-mysqlが欲しがっているPATHとは
よく「mySQLがインストールされているディレクトリのパスだよ」と説明されていますが、結局そこのパスから何が欲しいのかっていうと
mySQLがインストールされているディレクトリ以下からヘッダーファイル(includes以下)とライブラリファイル(lib以下)を探したいらしい。
今使っているmysqlは/opt/local/mysql5にインストールされているので、/opt/local/を指定すればいいはず。でもエラー。もしかして名前かなーと思い
sudo ln -s mysql5 mysql
と、シンボリックリンクを貼ってから再度configureを行ったら成功しました。
なんか前も別環境でこれでハマってた気がするんだけど気のせいかな。
※ちなみにこのあとmakeしたら別エラー出て困っているのは別のお話です
Macportsで入れたPHP5.3と直接入れたPHP5.1の共存とapacheでの使いっぷりだよー
最初にmacportsでphp5(5.3.17)を導入。macのローカルでPHP5.3+cakePHP2のプログラムを開発してました。
その後で5.1使いたくなってPHP5.1.6を直接コンパイルでぶっこみました。(でも結局使いませんでした)
そんな事すっかり忘れてしばらくローカルでの環境のいらない暮らしを続け、再び5.3+cake2の開発に戻ろうとローカルにアクセスしたらcakephpが動かない。
エラーを吐くわけでもなくじっとしてる。あれー?と思ってwebrootにphpinfoのファイルを置いてアクセスしてみたらPHPが5.1.6との表示。そりゃー動かないわー。
5.3さんはご健在なので
$ php -v php 5.3.17
多分5.1導入時にlibphp5.soをうっかり5.1に上書きしてしまったんですねぇ。おっかないですねぇ。
という訳でとりあえず現在の5.1用phplib5.soをコピーしておいて
$ cp /opt/local/apache2/modules/libphp5.so /opt/local/apache2/modules/libphp5.1.so
macportsでもう一回php5入れたらいいんじゃないかな…という事でやってみました。
$ sudo port install php5 +postgresql +apache2 +pear
Warningが出て「port definitions are more than two weeks old, consider using selfupdate」とかなんとか。
なのでmacportsのupdateをかけてやったよ。
$ sudo port -d selfupdate $ sudo port upgrade outdated $ sudo port upgrade installed
するとPHP Versionは5.3.19に。アップデートされたみたいなんでapxsをアレします
別にphp入れなおさなくてもこの作業だけでいいよね多分。
$ cd /opt/local/apache2/modules $ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
無事に5.3用のlibphp5.soが生成されたので httpd.confでlibphp5.soを読み込んでいるか確認。
LoadModule php5_module modules/libphp5.so
5.1で動かしたい時はさっきのコピーした方を読み込めばいいね。
LoadModule php5_module modules/libphp5.1.so
そんなわけで無事にapacheが5.3で動いてくれました。cakeちゃんも動きます。よかった。
本当はphpenv+php-buildで切り替えしたかったんだけどphp-buildでphpインストール失敗するから諦めた。
それはまた元気な時に試したい。