実際にはLinux Mintで確認。
最後のテストで通らないので使い物にならない…MySQLをソースから入れなおしたほうがよいか?
$ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=15
DISTRIB_CODENAME=olivia
DISTRIB_DESCRIPTION="Linux Mint 15 Olivia"
1. MySQLのインストール
Q4Mビルド時にヘッダが足りないといわれるのでlibmysqlclient-devも入れておくとよいみたい。
$ sudo apt-get install mysql-server libmysqlclient-dev
2. MySQLのソースをダウンロード
Q4MのバイナリはMySQL5.1系のものしか配布されていないので自分でビルドする必要がある。
ビルドにはインストールされているMySQLと同じソースが必要である。
事前にGUI設定のソフトウェアソースでソースコードリポジトリを有効化しておくこと。
# パッチあてなどでいくつかファイルができるのでフォルダを切ってそこにダウンロードする
$ mkdir mysql
$ cd mysql
# mysql-5.5の代わりにmysql-serverを指定しても可
$ apt-get source mysql-5.5
$ ls
mysql-5.5-5.5.31/
mysql-5.5_5.5.31-0ubuntu0.13.04.1.debian.tar.gz
mysql-5.5_5.5.31-0ubuntu0.13.04.1.dsc
mysql-5.5_5.5.31.orig.tar.gz
3. MySQLのビルド
ビルドして得られるバイナリはQ4Mのビルドに不要だが、
ソースを取得しただけではバージョン情報やエラーファイルが足りないためビルドを行う。
ビルドはcmakeを使って行う。
ncursesなどのライブラリが足りないとエラーが出た時は適宜Googleで調べて入れること。
Q4Mのビルド時に"include/mysqld_error.h"が必要となるが、これはcomp_errコマンドを使って生成する必要があるらしい。
$ sudo apt-get install cmake # CMakeをインストール
$ cd mysql-5.5-5.5.31
$ cmake .
$ make
$ cd extra
$ ./comp_err -H ../include/mysqld_error.h
4. Q4Mのビルド
ソースコードをダウンロードしてビルドする。
githubのものが最新版のようだが、masterの最新版はビルドにCMakeを使うようになっており、手順がドキュメントされていない。
そのためバージョン番号を切ってリリースされている最新のものを使うのがよい。
configure時の"--with-mysql"オプションは必須、フルパスでMySQLのソースを置いた位置を指定すること。
$ wget http://q4m.kazuhooku.com/dist/q4m-0.9.10.tar.gz
$ tar xvfz q4m-0.9.10.tar.gz
$ cd q4m-0.9.10
$ ./configure --with-mysql=/home/tune/src/mysql/mysql-5.5-5.5.31/
queue_config.hで定義されているQ4M_VERSION_HEXがビルドに必要だがなぜか読み込まれないのでsrc/ha_queue.ccの67行目と69行目をコメントアウトする
//#if MYSQL_VERSION_ID < 50500
# include "queue_config.h"
//#endif
その後ビルドしてインストール
$ make
$ sudo make install
5. AppArmorをオフにしてQ4Mを有効化する
MySQLのAppArmorに関する設定は" /etc/apparmor.d/usr.sbin.mysqld"にあり、
プラグインは自動的に読み込まれる設定になっているようだが、なぜか読み込まれなかった。
解決できなかったのでAppArmorを無効化して対処する。
$ sudo vi /etc/default/grub
# GRUB_CMDLINE_LINUXにapparmor=0を追加
GRUB_CMDLINE_LINUX="apparmor=0"
# /boot/grub/grub.cfgを更新して再起動する
$ sudo update-grub
$ sudo reboot
再起動後、Q4Mを有効化する。
$ mysql -u root -p -f mysql < support-files/install.sql
# MySQLにログインしてプラグインが表示されればインストールできている。
$ mysql -uroot -p
mysql> show plugins;
+--------------------------+----------+--------------------+--------------------+---------+
| Name | Status | Type | Library | License |
+--------------------------+----------+--------------------+--------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
....
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| QUEUE | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL |
+--------------------------+----------+--------------------+--------------------+---------+
24 rows in set (0.00 sec)
6. テスト
$ DBI_USER='root' DBI_PASSWORD='root password' DBI='dbi:mysql:database=test' ./run_tests.pl
でテストが通るはずなんだけどエラーが出まくる… orz