Mac(Yosemite)にMySQL 5.6とmysql2 gemをインストールする方法

Mac(OSX 10.10: Yosemite, 10.11: El Capitan)にMySQL 5.6とmysql2 gemをインストールする方法のメモです。
MacPortsを使う方法と、Oracleが配布しているコミュニティ版を使う方法について述べます。

追記(2016-03-11): El Capitanの場合の手順を追加(コミュニティ版のみ確認)

MacPortsを使う場合

MySQL 5.6(server)のインストール

% sudo port install mysql56-server

mysql2(gem)のインストール

# bundle コマンドを使う場合
% bundle config build.mysql2 --with-mysql-config=/opt/local/lib/mysql56/bin/mysql_config
% bundle install

# gem コマンドを使う場合
% gem install mysql2 -- --with-mysql-config=/opt/local/lib/mysql56/bin/mysql_config

MySQL Community Serverを使う場合

http://dev.mysql.com/downloads/mysql/

ここからOSX 10.9用のdmgをダウンロードしてインストール。

システム環境設定パネルでMySQL Serverを起動します。 (MySQLのインストール後にOSXの再起動が必要な場合があるようです)

gemをインストールする前にシンボリックリンクを貼る必要があります。

# Yosemiteの場合
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

# El Capitanの場合
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

これを行わないと、gemのインストールは成功しますが、実行時に下記のようなエラーが発生します。

# test.rb
require 'mysql2'

client = Mysql2::Client.new(:host => "localhost", :username => "root")
puts client.query("show databases")
% ruby test.rb
/Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': dlopen(/Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/mysql2-0.3.17/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/mysql2-0.3.17/mysql2/mysql2.bundle
  Reason: image not found - /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/mysql2-0.3.17/mysql2/mysql2.bundle
        from /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mysql2-0.3.17/lib/mysql2.rb:8:in `<top (required)>'
        from /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `require'
        from /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
        from /Users/kawahara_taisuke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in `require'
        from test.rb:1:in `<main>'

MySQLのディストリビューションパッケージの古いバグの名残のようです。

参考:

gemのインストールでは特別なことをする必要はありません。

# bundle コマンドを使う場合
% bundle install

# gem コマンドを使う場合
% gem install mysql2

bundleを使う場合、前述のMacPorts用の設定を行っていると~/.bundle/configに下記の行が追加されているので、 削除しておく必要があります。

# ~/.bundle/config
BUNDLE_BUILD__MYSQL2: "--with-mysql-config=/opt/local/lib/mysql56/bin/mysql_config"

MySQL Serverのメモリ使用量が多い

素のまま使っていると起動直後から400MBくらい割り当てられます。
下記のページを参考にして、 table_definition_cache というパラメータを適切に設定すれば抑えることができます。

Macbook Air にいれた開発用 MySQL 5.6.xx の メモリ使用量が異様に多い - 知のレバレッジを最大化せよ