tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

Mac OS XにHomeBrewでmysqlのバージョンを指定してインストールする - homebrew-versionsで5.1、homebrew-boneyardで5.5入れてみるメモ

はじめに

タイトル通りmysqlのバージョン(5.1と5.5)をインストールする方法です。
homebrew-versionsとhomebrew-boneyardを使います。
homebrewでは以前にもやったことはあるのですが、あらためてやってみたら少しやり方が変わってたのでメモ。

ながれ

  1. homebrew-versionsとhomebrew-boneyard
  2. homebrew-versionsからインストール
  3. homebrew-boneyardからインストール

1. homebrew/homebrew-versionsとhomebrew/homebrew-boneyard

前はこんな感じで任意のバージョンがインストールできました。

# brew versions mysql
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:

https://github.com/Homebrew/homebrew-versions

5.6.19   git checkout 3d3d8ae /usr/local/Library/Formula/mysql.rb
5.6.17   git checkout e271c21 /usr/local/Library/Formula/mysql.rb
・・・省略・・・
5.1.44   git checkout 052d1f2 /usr/local/Library/Formula/mysql.rb
5.1.43   git checkout c4decd7 /usr/local/Library/Formula/mysql.rb

※ 任意のバージョンのコミット番号をチェックアウトしてからinstall
# git checkout 052d1f2 /usr/local/Library/Formula/mysql.rb

# brew install mysql

brew versionsはそのままでは使えなくなったようなので
homebrew-versionsやhomebrew-boneyardを使ってインストールするようです。

ということで参考にさせて頂いたサイトまんまの引用ですが、
まずは説明&違いを。

homebrew-versions

公式とは異なるバージョンのフォーミュラを扱うリポジトリ
最新とは異なるバージョンのソフトを利用したい場合などに使用
(e.x. Tomcat6, MySQL5.1, Python2.x, Python3.x など)

homebrew-boneyard

メンテナンス不足や解決できない問題により公式リポジトリから
外されたフォーミュラを扱うリポジトリ (boneyard : 墓場, がらくた置き場)
※ ここにあるものをインストールする場合は動作が保証されていないので要注意

参考

こちらを参考にさせていただきました
Macのパッケージ管理をMacPortsからhomebrewへ

2. homebrew-versionsからインストール

準備

まずは確認と準備

※ 何もしない状態でインストールできるものをsearchしてみる
# brew search mysql
automysqlbackup      mysql          mysql-cluster    mysql-connector-c++      mysql-proxy          mysqlreport
groonga-normalizer-mysql   mysql++          mysql-connector-c    mysql-connector-odbc     mysql-search-replace
homebrew/versions/mysql51    homebrew/versions/mysql55        homebrew/php/php53-mysqlnd_ms  homebrew/php/php54-mysqlnd_ms      homebrew/php/php55-mysqlnd_ms      homebrew/php/php56-mysqlnd_ms

※ homebrew/versionsで公式とは異なるフォーミュラを用意
# brew tap homebrew/versions

※ 再度インストールできるものをsearchしてみる(mysql51とmysql55が増えてる)
# brew search mysql
automysqlbackup      mysql          mysql-cluster    mysql-connector-c++      mysql-proxy          mysql51        mysqlreport
groonga-normalizer-mysql   mysql++          mysql-connector-c    mysql-connector-odbc     mysql-search-replace       mysql55
homebrew/php/php53-mysqlnd_ms    homebrew/php/php54-mysqlnd_ms      homebrew/php/php55-mysqlnd_ms  homebrew/php/php56-mysqlnd_ms
インストール
※ インストール
# brew install mysql51
・・・省略・・・
==> Summary
==> Installing mysql51
Error: mysql51 cannot be built with any available compilers.
To install this formula, you may need to:
  brew install gcc

※ gccいれろとエラーがでるので素直に従う
# brew install gcc

※ 再度mysql51をインストール
# brew install mysql51
他にもエラーが出る場合
macportsのエラー

こんな具合にmacportsが邪魔していていっそのこと消せる場合は消しましょう。

# brew install mysql51
・・・省略・・・
checking for gcc... gcc-4.9
checking for C compiler default output file name... 
configure: error: in `/private/tmp/mysql51-l7S9UC/mysql-5.1.73':
configure: error: C compiler cannot create executables
See `config.log' for more details.

Warning: It appears you have MacPorts or Fink installed.
Software installed with other package managers causes known problems for
Homebrew. If a formula fails to build, uninstall MacPorts/Fink and try again.

READ THIS: http://git.io/brew-troubleshooting
If reporting this issue please do so at (not Homebrew/homebrew):
  https://github.com/homebrew/homebrew-versions/issues
さらにエラーが出る場合

brew doctorコマンドでbrewのチェックをしてみると良いかもです
brew doctorでエラーが出る場合は直してあげましょう

# brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:

    gmp
    libmpc
    mpfr

※ 怒られたやつにたいしてリンクを張る
# brew link gmp
# brew link libmpc
# brew link mpfr
成功するとこんな感じ
# brew install mysql51
==> Installing mysql51 from homebrew/homebrew-versions
==> Downloading http://mysql.mirrors.pair.com/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz
Already downloaded: /Library/Caches/Homebrew/mysql51-5.1.73.tar.gz
==> Patching
patching file scripts/mysqld_safe.sh
Hunk #1 succeeded at 411 (offset 27 lines).
patching file scripts/mysql_config.sh
Hunk #1 succeeded at 133 (offset 1 line).
==> ./configure --without-docs --without-debug --prefix=/usr/local/Cellar/mysql51/5.1.73 --localstatedir=/usr/local/var/mysql --sysconfdir=/usr/local/etc --with-plugins=innobase
==> make install
==> Caveats
Set up databases with:
    unset TMPDIR
    mysql_install_db

This formula is keg-only, which means it was not symlinked into /usr/local.

Conflicts with mysql, mariadb, percona-server, mysql-cluster, etc.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/mysql51/lib
    CPPFLAGS: -I/usr/local/opt/mysql51/include


To have launchd start mysql51 at login:
    ln -sfv /usr/local/opt/mysql51/*.plist ~/Library/LaunchAgents
Then to load mysql51 now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql51.plist
Or, if you don't want/need launchctl, you can just run:
    mysql.server start
==> Summary
?  /usr/local/Cellar/mysql51/5.1.73: 221 files, 41M, built in 3.6 minutes
確認

上記のように成功したっぽい表記が出たのでmysql serverを立ち上げてrootで入ってみます

が、インストールメッセージの途中に
This formula is keg-only,とあるように、実はこのままではうまくいきません。
なのでうまくいく小細工も合わせて確認

# mysql.server start
-bash: mysql.server: command not found

※ リンクを貼ってあげるとうまくいく
※ --forceがないとまた怒られるので気になる方はつけずにやってみて下さい
# brew link mysql51 --force

※ バージョン確認。うまくいってる感じ
# mysql --version
mysql  Ver 14.14 Distrib 5.1.73, for apple-darwin13.4.0 (i386) using readline 6.3

※ メッセージに従い初期ディレクトリの設定をする
# unset TMPDIR
# mysql_install_db
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/Cellar/mysql51/5.1.73/bin/mysqladmin -u root password 'new-password'
/usr/local/Cellar/mysql51/5.1.73/bin/mysqladmin -u root -h hoge-MAC.local password 'new-password'

Alternatively you can run:
/usr/local/Cellar/mysql51/5.1.73/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr/local/Cellar/mysql51/5.1.73 ; /usr/local/Cellar/mysql51/5.1.73/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/Cellar/mysql51/5.1.73/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local/Cellar/mysql51/5.1.73/bin/mysqlbug script!


# mysql.server start
Starting MySQL
. SUCCESS! 

# mysql -uroot -p
Enter password: 

mysql>

ってことで、一部リンクを張るという作業が必要なものの、うまくいきました。

参考

リンクに関してはちょこっとこちらが参考になりました
keg-onlyなパッケージはシンボリックリンクが作られない

有効/無効の切り替え

他のバージョンを入れてみる際や、後述するhomebrew-boneyard使う場合は一時的に無効にするためにリンクをはずします

# brew unlink mysql51
Unlinking /usr/local/Cellar/mysql51/5.1.73... 92 symlinks removed

無効にするの簡単ですね!

パッケージについて

余談ですが、おもむろに/usr/local/bin配下のmysql系を見てみるとこんな感じになってます。
bin配下のmysql系コマンドにbrewでいれたmysql51へのリンクが貼られて実行できるようになってます

# 
lrwxr-xr-x  1 hoge  admin  34 11 25 21:13 /usr/local/bin/mysql -> ../Cellar/mysql51/5.1.73/bin/mysql
lrwxr-xr-x  1 hoge  admin  41 11 25 21:13 /usr/local/bin/mysql.server -> ../Cellar/mysql51/5.1.73/bin/mysql.server
・・・省略・・・
lrwxr-xr-x  1 hoge  admin  38 11 25 21:13 /usr/local/bin/mysqltest -> ../Cellar/mysql51/5.1.73/bin/mysqltest

3. homebrew-boneyardからインストール

準備

まずは確認と準備。

※ homebrew-boneyard使わない状態でやってみる
# brew versions mysql
Error: Unknown command: versions

※ homebrew/boneyardでversionsを使えるようにする
# brew tap homebrew/boneyard

※ brew versions mysql
Warning: brew-versions is unsupported and will be removed soon.
You should use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions

5.6.21   git checkout 9fa92cd /usr/local/Library/Formula/mysql.rb
5.6.20   git checkout dd37049 /usr/local/Library/Formula/mysql.rb
・・・省略・・・
5.5.28   git checkout 5825f62 /usr/local/Library/Formula/mysql.rb
・・・省略・・・
5.1.44   git checkout 052d1f2 /usr/local/Library/Formula/mysql.rb
5.1.43   git checkout c4decd7 /usr/local/Library/Formula/mysql.rb
補足

上述もしてますが、
homebrew-versionsで5.1入れた後や他のバージョンが入ってる場合は
一時的にリンクを外してそのバージョンを無効にしてから行います

# brew unlink mysql51
インストール

今回は5.5.28を入れてみます。
上記の一覧から5.5.28のコミット番号5825f62を使います

※ 移動
# cd /usr/local

※ 過去のバージョンのフォーミュラをcheckout
# git checkout 5825f62 Library/Formula/mysql.rb

※ インストール
# brew install mysql

確認

※ 移動してないと後述のmysql_install_dbがうまくいかないことも
# cd /usr/local

# mysql --version
mysql  Ver 14.14 Distrib 5.5.28, for osx10.9 (x86_64) using readline 5.1

# メッセージに従い初期ディレクトリの設定をする
# unset TMPDIR
# mysql_install_db

※ mysql server 起動
mysql.server start

※ mysqlにはいってみる
# mysql -uroot -p

※ はいれた
mysql>

※ ついでにステータスを確認して本当に5.5.28か確認
mysql>status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for osx10.9 (x86_64) using readline 5.1

Connection id:      1
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28 Source distribution
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /tmp/mysql.sock
Uptime:         24 sec

Threads: 1  Questions: 4  Slow queries: 0  Opens: 15  Flush tables: 1  Open tables: 8  Queries per second avg: 0.166
--------------

補足

mysqlを入れただけなので初期設定は行う必要があります。その辺りはこちらで
mac OS XにHomeBrewでmysqlインストール。からの設定(mysql_install_db、mysql_secure_installation、my.cnf)やらアンインストールやら

その他

いちおう確認しますが、homebrew-boneyardでいれた場合は
通常のbrew install mysqlの挙動を変えてしまうのでディレクトリもこんな感じになります

# cd /usr/local/opt

# ls -al mysql*
lrwxr-xr-x  1 hoge  admin  22 11 25 21:58 mysql -> ../Cellar/mysql/5.5.28
lrwxr-xr-x  1 hoge  admin  24 11 25 21:53 mysql51 -> ../Cellar/mysql51/5.1.73

特に問題なければhomebrew-versionsで入れた方が
ディレクトリも別にできて安心そーです。

まとめ

思ったより長くなりましたが、任意のバージョンを入れることができました。
少しだけmysql試したくなった場合なんかはオフラインでも使えるし
入れておいて損はなさそうですね\(^o^)/