MacPorts版MySQLを自動起動する

以下のサイトを見る限り、Mac OS X以降では、launchdを使って自動起動するのが流儀らしいみたいです。

具体的には、/Library/LaunchDaemons/ 以下にplistファイルを作成し、launchctlコマンドでplistファイルをロードします。

$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

が、残念ながらMacPortsでインストール後には、該当のplistファイルが存在しなかったので、手動でplistファイルを用意します。

念のため /Library/LaunchDaemons/ 以下に配置されているplistファイルも確認してみます。ちょうどMacPortsにてインストールしたApache2用のplistファイルがあったので参考にします。

$ ls /Library/LaunchDaemons/ | egrep -e "apache2"
lrwxr-xr-x   1 root  wheel    76 12  1 00:36 org.macports.apache2.plist@ -> /opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist

/opt/local/etc/LaunchDaemons/ 以下にplistファイルを配置しているので、これも流儀にしたがっておきます。

嬉しいことにMySQL用のplistファイルを公開しているサイトがあるようなので、それをダウンロードして使います。

$ sudo mkdir -p /opt/local/etc/LaunchDaemons/org.macports.mysql5
$ cd /opt/local/etc/LaunchDaemons/org.macports.mysql5
$ sudo curl -O http://robwilkerson.org/_resources/hotlink/blog/mysql5.wrapper
$ sudo curl -O http://robwilkerson.org/_resources/hotlink/blog/org.macports.mysql5.plist
$ sudo chown root:wheel /opt/local/etc/LaunchDaemons/org.macports.mysql5/*
$ sudo chmod 755 /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper
$ sudo chmod 644 /opt/local/etc/LaunchDaemons/org.macports.mysql5/org.macports.mysql5.plist
$ sudo ln -s /opt/local/etc/LaunchDaemons/org.macports.mysql5/org.macports.mysql5.plist /Library/LaunchDaemons/org.macports.mysql5.plist

その後、マシンをリブートして自動起動していることを確認します。

$ ps ax | grep mysql
   51   ??  Ss     0:00.02 /opt/local/bin/daemondo --label=mysql5 --start-cmd /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper restart ; --pid=none
   67   ??  S      0:00.03 /bin/sh /opt/local/lib/mysql5/bin/mysqld_safe --datadir=/opt/local/var/db/mysql5 --pid-file=/opt/local/var/db/mysql5/localhost.pid
  165   ??  S      0:01.67 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql5 --user=_mysql --log-error=/opt/local/var/db/mysql5/localhost.err --pid-file=/opt/local/var/db/mysql5/localhost.pid --socket=/opt/local/var/run/mysql5/mysqld.sock --port=3306
  573 s000  U+     0:00.00 grep mysql