MySQL 5.6 をソースからビルドする

所々で話題の MySQL 5.6 をソースからビルドしたので,その記録を書いておきます.
今回は MySQL 5.6.10 を使用しますが, MySQL 5.6.XX ならそんなに変わらないと思います.
Ubuntu での作業です.ディレクトリ構成など読み替えは適宜.

ソースの取得

1. http://dev.mysql.com/downloads/
2. "MySQL Community Server"
3. "Select Platform" リストボックスで "Source Code" を選択
4. "Generic Linux (Architecture Independent), Compressed TAR Archive"

ソースの展開

$ tar xvf mysql-5.6.10.tar.gz
$ cd mysql-5.6.10 

cmake, make, make install

MySQL は (確か最近のバージョンから) いわゆる "configure && make && make install" ではなく "cmake && make && make install" なインストール方法を採用してます.
cmake は configure のようなもので, Makefile を作ってくれます.
cmake が入ってなければパッケージインストーラなりで適宜.

$ # Ubuntu の例
$ sudo apt-get install cmake

cmake に付けられるオプション一覧は

$ cmake . -LH

で見ることができて便利です.好みに合わせてオプションをつけることとなるでしょうが,今回はこうしました.

$ cmake -DMYSQL_DATADIR=/var/lib/mysql

テーブルやログなどのデータが入る datadir だけ明示的に指定してます.*1

お次は make. MySQL は make の出力が pretty です :)

$ make 
Scanning dependencies of target INFO_BIN
[  0%] Built target INFO_BIN
Scanning dependencies of target INFO_SRC
[  0%] Built target INFO_SRC
...

警告こそ出るものの,エラーなく make が終わりました.

あとは make install です.インストール先を特に指定していないので,/usr/local/mysql/ 以下に色々とインストールされるようです.

$ sudo make install

起動するまでの諸々

流れとしてはこんな感じです.
1. /etc/my.cnf を作成
2. mysql ユーザ・グループを作成
3. mysql_install_db を実行
4. 起動スクリプトを仕込む
5. MySQL サーバ起動
6. クライアントからの接続チェック

/etc/my.cnf を作成

テンプレートがあるのでそれをコピーします.

$ sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

MySQL 5.6 のテンプレートは随分と簡素ですので,以前から使っていた設定ファイルがある場合はそちらを使ったほうが良いかもしれません.
今回は最低限,basedir (インストール先) と datadir (テーブルやログが入る) を指定しておきましょう (必須かは知りません).

...
# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /var/lib/mysql
# port = .....
...
mysql ユーザ・グループを作成

MySQL を走らせる mysql ユーザとグループを作成しましょう.

$ sudo groupadd mysql
$ sudo useradd -g mysql -d /bin/false mysql
mysql_install_db を実行

mysql_install_db コマンドは,起動時に必要なデータを datadir に書き込むのですが,今回の作業では datadir にするつもりだった /var/lib/mysql/ ができていなかったので作成します.mysql ユーザ・グループにパーミションを与えるのも忘れずに.

$ sudo mkdir /var/lib/mysql
$ sudo chown mysql:mysql /var/lib/mysql

mysql_install_db コマンドを実行します.

$ sudo /usr/local/mysql/scripts/mysql_install_db

この出力で "OK" と二箇所で言われていれば大丈夫です.*2
この出力は割と重要なことを言っているのでしっかりと読んでおいて下さい.
このコマンドでできたファイルは所有者が root だったりするので,これらも mysql ユーザ・グループから読み書きできるようにします.

$ sudo chown mysql:mysql -R /var/lib/mysql/*
起動スクリプトを仕込む

起動スクリプトを仕込みましょう.

$ sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
MySQL サーバ起動

起動スクリプトから MySQL サーバを起動しましょう.

$ sudo /etc/init.d/mysqld start

エラーログは基本的に datadir 直下にあるはずなので,起動に失敗したらチェックしましょう.

クライアントからの接続チェック

接続チェックを行います.

$ /usr/local/mysql/bin/mysql -u root

MySQL のシェルに入れたら成功です.
ついでにテーブルを作ってみましょう.

mysql> use test
Database changed

mysql> create table foobar (a INT);
Query OK, 0 rows affected (0.52 sec)

mysql> insert into foobar values (777), (333);
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from foobar;
+------+
| a    |
+------+
|  777 |
|  333 |
+------+
2 rows in set (0.00 sec)

やり残したこと

現状,MySQL の root ユーザにパスワードが設定されておらず危険です.
http://www.yukun.info/blog/2008/10/create-user-grant-password.html
などにユーザ管理周りのことが書いてありますので,ご参照下さい.

*1:自分用メモ: 本当はこうした -> "cmake -DMYSQL_DATADIR=/var/lib/mysql=OFF -DWITH_EXAMPLE_STORAGE_ENGINE=ON -DWITH_DEBUG=ON"

*2:駄目だったら,昔作成した my.cnf が優先的に読まれていないかなどを確認して下さい./etc/mysql/my.cnf など怪しいです.