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のディストリビューションパッケージの古いバグの名残のようです。
参考:
- http://bugs.mysql.com/bug.php?id=61243
- http://stackoverflow.com/questions/5446747/ruby-mysql2-gem-not-working-mac-os-x-snow-leopard-ruby-1-9-2
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 の メモリ使用量が異様に多い - 知のレバレッジを最大化せよ