CentOS 7 に Q4M をインストールする


CentOS 7環境に Q4M をインストールしてみた。

```shell-session
# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
# uname -a
Linux q4m 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
```

といっても以下のスクリプトを使わせて貰っただけ。

Q4Mを簡単に導入する方法 for MySQL 5.6 - blog.nomadscafe.jp
http://blog.nomadscafe.jp/2014/01/q4m-for-mysql-56.html

スクリプトの実行前に以下のパッケージのインストールが必要。

```shell-session
# yum install -y git gcc gcc-c++ bison perl-Data-Dumper
```

後は `git clone` して `setup.sh` を実行すれば OK。

```shell-session
# cd /usr/local/src
# git clone git://github.com/kazeburo/mysetup.git
# cd mysetup/q4m_mysql56
# sh ./setup.sh
```

cmake, libaio-devel, ncurses-devel は入っていなければこのスクリプトが自動的に yum から入れてくれる。
しばらく待つとビルドが完了し mysql が起動してくる。

ただ、CentOS 7 だと起動スクリプトが上手く動かないっぽい。
インストール完了後、以下の表示の所で止まってしまう。

```shell-session
New default config file was created as /usr/local/q4m/my.cnf and
will be used by default by the server when you start it.
You may edit this file to change server settings

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

Starting q4m (via systemctl):
```

Ctrl-C して ps すると mysql のプロセスは上がっているが、確認してみると Engine がインストールされていない状態になってしまっている。

これは setup.sh 内の `/etc/init.d/q4m start` している所で実行が止まってしまうため、その後で起動後に実行している install.sql が実行されていないことが原因。

install.sql は以下にあった。

```
/usr/local/src/mysql-5.6.20/storage/q4m/support-files/install.sql
```

CentOS 7 の起動スクリプトとか全然わからないので取り敢えず直接 install.sql を実行する。

mysql に入ってスクリプトを読込み。

```sh
# /usr/local/q4m/bin/mysql -uroot
mysql> source /usr/local/src/mysql-5.6.20/storage/q4m/support-files/install.sql
```

これで QUEUE エンジンがインストールされた。

```
mysql>show engines;
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                   | Transactions | XA   | Savepoints |
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables | NO           | NO   | NO         |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                     | NO           | NO   | NO         |
| MyISAM     | DEFAULT | MyISAM storage engine                                     | NO           | NO   | NO         |
| QUEUE      | YES     | Queue storage engine for MySQL                            | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                        | NO           | NO   | NO         |
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
5 rows in set (0.00 sec)

mysql>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     |
| sha256_password       | ACTIVE | AUTHENTICATION | NULL               | GPL     |
| MEMORY                | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| MyISAM                | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| CSV                   | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| MRG_MYISAM            | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| partition             | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| QUEUE                 | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL     |
+-----------------------+--------+----------------+--------------------+---------+
10 rows in set (0.00 sec)
```

試しに適当な DB を作って QUEUE Engine を使ったテーブルを作ってみる。
テーブルの DDL は以下の記事のものを使用させて頂いた。

第10回　ジョブキューで後回し大作戦―TheSchwartz，Qudo，Q4M（3）：Perl Hackers Hub｜gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/perl-hackers-hub/001003

```
mysql>CREATE DATABASE example_db DEFAULT CHARACTER SET utf8;
mysql>use example_db
Database changed

root@localhost mysql>CREATE TABLE welcome (
    ->     nickname       varchar(255) NOT NULL,
    ->     email          varchar(255) NOT NULL,
    ->     created_on int(10) unsigned NOT NULL
    -> ) ENGINE=QUEUE DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

root@localhost mysql>show create table welcome\G
*************************** 1. row ***************************
       Table: welcome
Create Table: CREATE TABLE `welcome` (
  `nickname` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `created_on` int(10) unsigned NOT NULL
) ENGINE=QUEUE DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```

起動スクリプトさえ上手く動くようになれば CentOS 7 でもお手軽に環境構築できそう。