MySQLのインストールいろいろ

こんにちは、DBAです。
ふと思い立ったのでMySQLのインストール方法を列挙してみることにしました。ターゲットはMySQL 5.6および5.7ですが、5.5, 5.1でも公式yumリポジトリー以外はおんなじようなもんなんじゃないでしょうか。
一応公式マニュアルはこちら。
http://dev.mysql.com/doc/refman/5.6/en/installing.html
ぱっと思いつく選択肢は
- ソースからインストール
- 職人がひとつずつコンパイル
- mysql-build
- バイナリーtarボールインストール
- rpmインストール
- 公式rpmをインストール
- 公式リポジトリからyumインストール
- CentOSのリポジトリやepelからyumインストール
くらいでしょうか。
3-b, 3-cは滅多にやらないので割愛します(あまりにめんどくさい上にすぐ潰したりする時はyumでやることもある、程度)
まずはソースから職人がコンパイルする方法。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz $ tar xzf mysql-5.6.21.tar.gz $ cd mysql-5.6.21 $ cmake -DCMAKE_INSTALL_PREFIX=/usr/mysql/5.6.21 -DMYSQL_DATADIR=/usr/mysql/5.6.21/data -DWITH_INNODB_MEMCACHED=ON -i . $ make $ sudo make install $ vim /etc/my.cnf [mysqld_multi] user = root password= no-log [mysqld56] server-id= 1056 port = 64056 mysqld = /usr/mysql/5.6.21/bin/mysqld basedir = /usr/mysql/5.6.21 datadir = /usr/mysql/5.6.21/data socket = /usr/mysql/5.6.21/data/mysql.sock pid-file = /usr/mysql/5.6.21/data/mysql.pid $ mysqld_multi start 56 $ mysqld_multi stop 56
主に俺の 遊び場 検証環境はこれで作っています。/usr/mysqlなのは完全に趣味。起動/停止はmysqld_multiに任せてます。基本的に5.0, 5.1, 5.5, 5.6, 5.7の各最新バージョンを1インスタンスずつ起動させるような使い方なので、グローバルmy.cnf使って内部で切り分けてます。これはこれで楽チン。
次いでレプリケーション構成を試したい時や、マイナーバージョンアップしたやつは↑する時に捨てちゃうので、そんなときは kamipoさん の mysql-build + MySQL::Sandbox のコンボが便利です(バイナリーのtarボールでいいじゃんってアレもあるんですが、どうせgdbでアタッチしたり色々するし、自分でそのバージョンのダウンロードページまで行くのが面倒なのでmysql-buildに結構頼ります)
$ git clone https://github.com/kamipo/mysql-build.git $ cd mysql-build $ bin/mysql-build --sudo 5.6.21 /opt/mysql/5.6.21 innodb-memcached $ make_replication_sandbox 5.6.21 --how_many_slaves=3
/opt/mysql/バージョン番号 のディレクトリに突っ込むことで、make_sandboxやmake_replication_sandboxがそのまま通る様になる。楽チン。
:(;゙゚’ω゚’): なお、この記事を書いている真っ最中にSANDBOX_BINARY環境変数の存在を知った。。
プロダクションではバイナリーtarボールを使っています。gcc, iccでコンパイルした場合とバイナリーtarボールでベンチ取ったこともありましたが、誤差くらいしか違わなかったのでこれでいいやって感じです。
/data/hoge1, /data/hoge2 というようにdatadirを変えながら複数インスタンスが相乗りする(こともある)ので、mysql.serverとか作らずにmysqld_safeとmysqladminでやってます。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz $ tar xzf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz $ sudo ln -s $PWD/mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local/mysql5621 $ cd /usr/local/mysql5621 $ bin/mysqld_safe --defaults-file=/data/hogehoge/my.cnf & $ bin/mysqladmin --defaults-file=/data/hogehoge/my.cnf -uroot -pxxxx shutdown
手間がかからなくて簡単なオペレーションで済むようにしてあります。自動化しやすいからね。
最後にRPM Bundleを使う方法。これは基本的にバグの再現テストの時に使います(Mroongaな場合が多いけど、MySQLの場合も) クリーンな状態から始めたいのでEC2にインスタンスを立ち上げてMySQLをまっさらからインストール。テスト終わったらすぐにインスタンスTerminateしちゃうのでこれでも全く問題なし。
別にRPM Bundleでなくバイナリーtarボールでも構わないんですが、俺はこっちの方が何故か好きです。
ちなみにここだけコマンド例がMySQL 5.6.20なのは、5.6.21のRPM Bundleにはshared-compatが何故か入っていないからです。。ばぐれぽしました。
http://bugs.mysql.com/bug.php?id=74611
※注記: 公開までのタイムラグの間にFixされました。2014/10/31 17:35現在ダウンロードできるMySQL-5.6.21-1.linux_glibc2.5.x86_64.rpm-bundle.tarにはshared-compatが含まれています。
$ wget http://downloads.mysql.com/archives/get/file/MySQL-5.6.20-1.linux_glibc2.5.x86_64.rpm-bundle.tar $ tar xf MySQL-5.6.20-1.linux_glibc2.5.x86_64.rpm-bundle.tar $ sudo rpm -i MySQL-shared-compat-5.6.20-1.linux_glibc2.5.x86_64.rpm $ sudo rpm -e mysql-libs $ sudo rpm -i MySQL-client-5.6.20-1.linux_glibc2.5.x86_64.rpm MySQL-devel-5.6.20-1.linux_glibc2.5.x86_64.rpm MySQL-embedded-5.6.20-1.linux_glibc2.5.x86_64.rpm MySQL-server-5.6.20-1.linux_glibc2.5.x86_64.rpm MySQL-shared-5.6.20-1.linux_glibc2.5.x86_64.rpm MySQL-test-5.6.20-1.linux_glibc2.5.x86_64.rpm $ sudo service mysql start $ sudo service mysql stop
バージョンアップの切り戻しがすさまじく面倒なのと、/var/lib/mysqlが色々隠れたところに現れるのがイヤなので、mysqldを複数起動したいところでは使いませんねー。。
用途に応じて色々お楽しみください。それでは。