MacでMySQL

生徒さんから質問があったので、確認のためにMacでのMySQL環境を構築してみた。

  1. MySQLのダウンロードサイトからMac OS X用のものをダウンロードする。MacならやはりDMG Archiveが便利でしょう。
  2. ダウンロードしたdmgを展開し、中にある mysql-5.X.XX-osx10.6-x86_64.pkg (ファイル名は環境などで若干違う)をダブルクリックし、後は指示に従ってインストールする。
  3. MySQLStartupItem.pkg をダブルクリックして、同様に、指示に従ってインストールする。
  4. MySQL.prefPane をシステム環境設定のウインドウにドラッグする。システム環境設定に「その他」の欄が新たに表示され、MySQLのアイコンが追加される。このアイコンをクリックすると、MySQLの起動制御パネルが表示されるので、そこから起動ができる。

これで、インストールは完了する。特に難しいことはない。あとは、WindowsLinuxと同様に設定ファイルを書き換えたり、rootユーザのパスワードを設定したり、匿名ユーザを消去したりすればよい。ただ、設定ファイルを書き換える場合、 /etc/my.cnf がデフォルトでは存在しない。その場合は、 /usr/local/mysql/support-files/my-medium.cnf をコピーしてきて書き換える。

$ sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

余談だが、当然sudoはrootで実行する場合にはいらない。こういった環境構築はroot権限が必要なことが多いから、いちいちsudoするよりは、rootで実行した方がいい。rootのなりかたはMacでrootになる - Archit!!を参照。
さらに、そのままではmysqlコマンドが認識しないので、aliasを.bashrcに設定しておいた方がいい。

alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin

あるいは、 .bash_profile にパスを設定しておくのもよい。

PATH = /usr/local/mysql/bin:$PATH
export PATH

あとは、JavaアプリやPHPアプリからの接続の問題となる。

Javaアプリからの接続

これは簡単だ。JDBCドライバが勝手にしてくれるので、WindowやLinuxとかわらない。というより、そもそも、Java自体が基本はOS非依存なわけだから、当たり前といえば当たり前。onnector/Jのダウンロードサイトから該当ファイルをダウンロードし、 mysql-connector-java-5.X.XX-bin.jar をクラスパスの通っているところに配置すればよい。

PHPアプリからの接続

こちらは少し手間がいる。

  1. MySQLのソケットファイルが通常と違う位置にあるので、それを設定してあげる必要がある。これは、 /etc/php.ini に書き込む。 php.ini が存在しない場合は、 /etc/php.ini.default をコピーして書き換える。書き換える場所は以下の2か所。何行目かは検索した方が早いが、前者がだいたい1060行目、後者がだいたい1210行目ぐらい。
    pdo_mysql.default_socket = /tmp/mysql.sock
    mysql.default_socket = /tmp/mysql.sock

    ちなみに、この /tmp/mysql.sock はMySQLが起動していないと存在しないファイル。起動していない状態で /tmp ディレクトリ内をいくら探しても見つからない。
  2. 当然だが、 extension の読み込みは必要。以下の2行がコメントアウトされているのなら、コメントを削除しておく必要がある。両方ともだいたい960行目ぐらい。
    extension=php_mysql.dll
    extension=php_pdo_mysql.dll

これで、Apacheを再起動すれば、無事PHPから接続できるようになる。

MacBook (Pro)での注意点

このページにもあるように、MacBookなど、ノートブックタイプのものでは注意が必要だ。スリープをしてMacBookをどこかにもっていき、そこで目覚めさせた場合、再起動ができないなど不具合が起こる。これは、不具合なわけではなく、ホスト名が変更されてしまうためにおこる現象だ。面倒だが、スリープ前にMySQLを必ずシャットダウンするようにすればよい。