UbuntuでMySQL 5.7をソースからビルドしてMroongaを導入する

MySQL用の日本語全文検索エンジンMroongaをUbuntu 14.04で導入しようにも、PPAを使ったインストールだとMySQL 5.5が入ってしまうので、5.7で稼働させるためにMySQLをソースからビルドしてインストールする方法をとってみました。

本稿はその手順の記録です。

[Mroonga - MySQLで高速日本語全文検索](http://mroonga.org/ja/)

## 環境

サーバー: ConoHa VPS メモリ4GBプラン
OS: Ubuntu 14.04（16.04も可）

## ドキュメント

Mroongaの公式ドキュメントを参考にしました。

[2.7. その他 — Mroonga v6.08 documentation](http://mroonga.org/ja/docs/install/others.html)

## 手順

### 必要な諸々をインストール

```bash
sudo apt-get update
sudo apt-get install cmake g++ libncurses5-dev zlib1g-dev
```

### Groongaをインストール

MroongaのビルドにGroongaが必要なのでパッケージをインストールします。

```bash
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:groonga/ppa
sudo apt-get update
sudo apt-get install libgroonga-dev groonga-normalizer-mysql
```

### MySQL 5.7をインストール

[MySQL :: Download MySQL Community Server](http://dev.mysql.com/downloads/mysql/)

「Select Platform」から「Source Code」を選択し、リストより「Generic Linux (Architecture Independent), Compressed TAR Archive Includes Boost Headers」のDownloadをクリックします。飛んだページ先下部の「No thanks, just start my download.」からリンクをコピーしておきます。

```bash
cd /usr/local/src
sudo wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.14.tar.gz
sudo tar xf mysql-boost-5.7.14.tar.gz
sudo mkdir -p /usr/local/build/mysql-5.7.14
cd /usr/local/build/mysql-5.7.14
sudo cmake /usr/local/src/mysql-5.7.14 \
> -DDOWNLOAD_BOOST=1 \
> -DWITH_BOOST=/usr/local/build/mysql-5.7.14/boost
sudo make -j4
sudo make install
```

メモリが足りていないと`make`で失敗します。失敗して再度インストールを試みる場合は`CMakeCache.txt`を削除しないと上手くいかない場合があります。

```bash
rm CMakeCache.txt
```

### Mroongaをインストール

Mroongaは頻繁に更新されているので、予め最新バージョンを確認しておきましょう（今回は6.08）。

[Mroonga - MySQLで高速日本語全文検索](http://mroonga.org/ja/)

```bash
cd /var/tmp
wget http://packages.groonga.org/source/mroonga/mroonga-6.08.tar.gz
tar xf mroonga-6.08.tar.gz
cd mroonga-6.08
./configure \
> --with-mysql-source=/usr/local/src/mysql-5.7.14 \
> --with-mysql-build=/usr/local/build/mysql-5.7.14 \
> --with-mysql-config=/usr/local/mysql/bin/mysql_config
make
sudo make install
```

### MySQLを起動

`mysql`ユーザーとグループを作成しパーミッションの設定をしておきます。

```bash
sudo groupadd mysql
sudo useradd -r -g mysql mysql
sudo chown -R mysql:mysql /usr/local/mysql
```

MySQLの初期設定をし、起動します。

```
sudo /usr/local/mysql/bin/mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
sudo /usr/local/mysql/support-files/mysql.server start
```

`mysql_secure_installation`で`root`のパスワードを設定します。

```bash
/usr/local/mysql/bin/mysql_secure_installation
```

Mroongaを注入します。

```bash
/usr/local/mysql/bin/mysql -uroot -p < /usr/local/share/mroonga/install.sql
```

MySQLにログインし、`SHOW ENGINES`で`Mroonga`が表示されればOKです。

```
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| Mroonga            | YES     | CJK-ready fulltext search, column store                        | 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       |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)
```

### その他

#### mysqlコマンド

シンボリックリンクを作成します。

```bash
sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
```

次のコマンドが実行できればOKです。

```bash
mysql -uroot -p
```

#### my.cnf

`my.cnf`は`base_dir`の直下に配置します。

```bash
sudo vi /usr/local/mysql/my.cnf
```

#### 自動起動

`/etc/init.d`にシンボリックリンクを作成し、`sysv-rc-conf`でMySQLの自動起動を設定します。

```bash
sudo ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf mysql on
sudo sysv-rc-conf --list
```

また、`service mysql`で起動や終了などができるようになります。

```bash
sudo service mysql reload
```

## 参考

- [MySQLをソースコードからインストール - Qiita](http://qiita.com/HayneRyo/items/3234afc4b34e00707fcc)
- [MySQL5.6をソースからインストール - Qiita](http://qiita.com/ksugawara61/items/f42a796488d227e4f79e)