推奨configureオプション最新版

MySQL 5.0系向けです。MySQL 5.0.46をベースにしてます。

CC=gcc CXX=gcc ./configure \
--prefix=/usr/local/mysql \
--localstatedir=/usr/local/mysql/data \
--libexecdir=/usr/local/mysql/bin \
--enable-thread-safe-client \
--enable-local-infile \
--enable-assembler \
--with-pic \
--with-fast-mutexes \
--with-client-ldflags=-static \
--with-mysqld-ldflags=-static \
--with-zlib-dir=bundled \
--with-big-tables \
--with-yassl \
--with-readline \
--with-archive-storage-engine \
--with-blackhole-storage-engine \
--with-csv-storage-engine \
--with-example-storage-engine \
--with-federated-storage-engine \
--with-innodb \
--with-extra-charsets=complex \
--with-senna --with-mecab

各種ストレージエンジンのOn/Offは好みでいいと思う。mecabを外したい人は--with-mecabなしで。

以下、ポイント。

--with-readline

これを付けましょう。そうすることでバンドル版のGNU readlineが使用されます。あるいは--without-readlineでもいいです。その場合はシステムのGNU readlineが使用されます。要するに、GNU readlineが使用されるようにするのがポイントです。

やってはいけないのは、--with-readline/--without-readlineのどちらも付けないやり方(デフォルトでは--with-libeditが付けられたと解釈される)。そうするとバンドル版のeditlineが使用されることになり、できあがったmysqlコマンドラインクライアントでの日本語(マルチバイト文字)の入力ができなくなります。

--with-client-ldflags=-staticと--with-mysqld-ldflags=-static

これをつけることで、libsennaがmysqldとかのバイナリに埋めこまれるようになります。

追記:libsenna.aを使用してmysqldバイナリの中にsennaを組み込んでしまうためには、Sennaのconfigure時にLDFLAGS=-staticを付与しておく必要があります。そうでないと、libsenna.soにリンクする形でmysqldができあがってしまうようです(確認中)。

LDFLAGS=-static ./configure --prefix=/usr && make && sudo make install

ldd mysqldしてみると違いが解ります。

そうすることで、ビルドして別の場所へ持って行って動かそうとした場合に、libsennaがそのマシン上にインストールされていなくとも動作可能になりますし、何よりmysqldがsigsegvとかで落ちてしまった場合の障害解析がやりやすくなります(mysqldがsigsegv時に出力する16進数のstack traceとmysqldのシンボル情報を突き合わせることで-g無しビルドでも関数の呼出スタックと落ちた個所が分かる)。

これまでMySQLSennaを組み込めたかどうかをldd mysqldで確認していた人はその方法が使えなくなるので、代わりに"strings mysqld | grep sen"とかで確認するといいかも。

CC=gcc CXX=gcc

あと厳密にはconfigureオプションというよりもMakefileに渡す情報かもですが、これもやっておきましょう。ldd mysqldをしてみると違いが解りますが、C++系のライブラリ依存が減ります。

make installの代わりにmake bin-dist

configureとmakeが終わったら、sudo make installではなくてmake bin-distをやることをオススメします。

make bin-distは、ソースディレクトリ内にバイナリパッケージ(tarball)を作ってくれます。make installするよりもそのtarballを好きな場所で展開して使う方がおすすめです。ここでは細かい説明は省きますが、make bin-distは単にtarball化するだけでなく、スクリプトの配置変えや一部編集なども行っており、そうすることでMySQL公式バイナリにより一層近いバイナリパッケージを得ることができます。

追記:ただし、make bin-distはmysqldバイナリに対してstripなども行っており、-g付きビルドなどを行っていたとしてもmysqldからシンボル情報が切り捨てられます(stripした方が速いので)。デバッガを使いたい人はmake bin-distではなくmake installを引き続き利用する必要があるかと思います。