mysql-buildでいろんなバージョンのMySQLをインストールしたい!

これはMySQL Casual Advent Calendar 2011 - MySQL Casualの8日目の記事です!

UDFでFizzBuzz

id:sugyanさんがストアドプロシージャでFizzBuzzをやっていたのでMySQLのUDF(user-defined function)でもやってみました。
kamipo/mysql_fizzbuzz · GitHub

git clone git://github.com/kamipo/mysql_fizzbuzz.git
cd mysql_fizzbuzz
g++ -shared -fPIC -Wall -g mysql_fizzbuzz.cc -o mysql_fizzbuzz.so
cp mysql_fizzbuzz.so /usr/local/mysql/lib/mysql/plugin
mysql -u root -e "create function fizzbuzz returns string soname 'mysql_fizzbuzz.so'"
mysql -u root -NE -e "SELECT fizzbuzz(100)"
*************************** 1. row ***************************
1
2
Fizz
4
Buzz
Fizz
7
...

こんなカンジでUDFでもカジュアルにFizzBuzzできましたね!

本題

@さんと@さんとインストールスクリプトネタでかぶってるけど気にしない(+`ω´+)

最近はperlbrewとかrvmとかnvmとかで簡単に自分用のperlとかrubyとかnodeとかインストールできるじゃないですか。
そこでMySQLもそれと同じぐらいカジュアルにインストールしたいわけですよ。
それで今日書いてたのがkamipo/mysql-build · GitHubです。

とりあえずいまはsstephenson/ruby-build · GitHubのほとんどコピペなんですが

git clone git://github.com/kamipo/mysql-build.git
cd mysql-build

githubからcloneしてきてもらって

./bin/mysql-build --definitions
4.0.30
5.1.59
5.5.14-spider-2.27
5.5.18

インストールできるMySQLの一覧がみれるので

./bin/mysql-build -v 5.1.59 ~/opt/mysql/5.1.59

これだけでインストールできます!!

MySQL 5.5以降はビルドするのにcmakeが必要なんですが、あらかじめcmakeを入れておけば

./bin/mysql-build -v 5.5.18 ~/opt/mysql/5.5.18

こんなに簡単にインストールできます!!!!

じつはさっき知ったんですが最近のSpiderストレージエンジンはQ4MとHandlerSocketもバンドルされてるみたいじゃないですか。これも入れてみましょう。

./bin/mysql-build -v 5.5.14-spider-2.27 ~/opt/mysql/5.5.14-spider-2.27
...

BUILD FAILED

Inspect or clean up the working tree at /tmp/mysql-build.20111208231547.62780
Results logged to /tmp/mysql-build.20111208231547.62780.log

Last 10 log lines:
[ 93%] Building CXX object storage/spider/CMakeFiles/spider.dir/hs_client/config.cpp.o
[ 93%] Building CXX object storage/spider/CMakeFiles/spider.dir/hs_client/escape.cpp.o
[ 93%] Building CXX object storage/spider/CMakeFiles/spider.dir/hs_client/fatal.cpp.o
[ 93%] Building CXX object storage/spider/CMakeFiles/spider.dir/hs_client/hstcpcli.cpp.o
[ 94%] Building CXX object storage/spider/CMakeFiles/spider.dir/hs_client/socket.cpp.o
[ 94%] Building CXX object storage/spider/CMakeFiles/spider.dir/hs_client/string_util.cpp.o
Linking CXX shared module ha_spider.so
ld: warning: directory '/Users/kamipo/opt/mysql/5.5.14-spider-2.27/lib' following -L not found
[ 94%] Built target spider
make: *** [all] Error 2

ビルドに失敗しました!!ここはあきらめて@さんの一発でインストールできるスクリプトを使っておいてください!!

気を取り直してMySQL 4.0の最新バージョンのMySQL 4.0.30も入れてみましょう。

./bin/mysql-build -v 4.0.30 ~/opt/mysql/4.0.30
...

BUILD FAILED

Inspect or clean up the working tree at /tmp/mysql-build.20111208230555.14795
Results logged to /tmp/mysql-build.20111208230555.14795.log

Last 10 log lines:
longlong2str.s:123:suffix or operands invalid for `pop'
longlong2str.s:132:Unknown pseudo-op: .size
longlong2str.s:132:Rest of line ignored. 1st junk character valued 108 (l).
longlong2str.s:135:Unknown pseudo-op: .type
longlong2str.s:135:Rest of line ignored. 1st junk character valued 108 (l).
longlong2str.s:140:Unknown pseudo-op: .size
longlong2str.s:140:Rest of line ignored. 1st junk character valued 108 (l).
make[2]: *** [longlong2str-x86.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

またビルドに失敗しました!!MySQL 4.0のことは@さんに聞かないとよくわからないので今回はあきらめましょう!!

【追記】
(ビルドに失敗したのはMac OS X 10.6.8でのことで、Ubuntu 10.04ではどちらもビルド成功しました)

まとめ

mysql-buildでカジュアルにMySQLをインストールしてみましょう!

エンジョイ!

参考