Snow LeopardのMySQLはネットワーク変更に弱い?

MacPortsでインストールしたMySQLを使い始めたところ、動作的には何も問題ないのだけど、時々、何故かエラーメッセージが出て終了出来ないことに気がついた。動作環境は下記の通り。

$ sudo /opt/local/share/mysql5/mysql/mysql.server stop
Password:
 ERROR! MySQL manager or server PID file could not be found!

MySQLはどのpidファイルを参照しているのだろうか?確認してみたところ、下記の設定で動作していると分かった。

$ ps ax | grep mysql
59425 s003  S      0:00.02 /bin/sh /opt/local/lib/mysql5/bin/mysqld_safe --datadir=/opt/local/var/db/mysql5 --pid-file=/opt/local/var/db/mysql5/foo.mshome.net.pid
59475 s003  S      0:12.11 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql5 --user=_mysql --log-error=/opt/local/var/db/mysql5/foo.mshome.net.err --pid-file=/opt/local/var/db/mysql5/foo.mshome.net.pid

ちなみにこの時のホスト名は下記だった。これなら"(ホスト名).pid"ファイルが見つからないと文句を言うMySQLの気持ちも納得出来る。

$ hostname
foo.local

稼働中のMySQL関連プロセスを強制終了して、ネットワーク未接続状態で再度MySQLを起動してみると、今度は下記のpidファイルを使っていた。

$ sudo /opt/local/share/mysql5/mysql/mysql.server start
Password:
Starting MySQL
. SUCCESS! 
$ ps ax | grep mysql
52815 s003  S      0:00.02 /bin/sh /opt/local/lib/mysql5/bin/mysqld_safe --datadir=/opt/local/var/db/mysql5 --pid-file=/opt/local/var/db/mysql5/foo.local.pid
52865 s003  S      0:00.04 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql5 --user=_mysql --log-error=/opt/local/var/db/mysql5/foo.local.err --pid-file=/opt/local/var/db/mysql5/foo.local.pid

どうやら、このMacをあるネットワーク環境(Windowsドメイン有、WINSサーバ有←何処まで関係するのか不明)に接続するとホスト名が"foo.mshome.net"に設定されるものの、それ以外の環境では(オフラインを含む)"foo.local"に設定されるようだ。このためホスト名が変わり、これが不整合と見なされて上記の問題が生じているらしい。

MySQLを1台のMacのみで使っているし動作環境は変わらないから、参照するpidファイル名はネットワーク環境に関わらず常に固定で構わない気がする。試しにpidファイルを指定して起動させてみた。

$ sudo /opt/local/share/mysql5/mysql/mysql.server start --pid-file=/opt/local/var/db/mysql5/localhost.pid
Starting MySQL
.............................^C

ところが今度は起動処理がなかなか終わらない。プロセス自体は起動しているものの、肝心のpidファイル指定が上手く出来ていない。

$ ps ax | grep mysql
52915 s003  S      0:00.02 /bin/sh /opt/local/lib/mysql5/bin/mysqld_safe --datadir=/opt/local/var/db/mysql5 --pid-file=/opt/local/var/db/mysql5/foo.local.pid  --pid-file=/opt/local/var/db/mysql5/localhost.pid
52965 s003  S      0:00.04 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql5 --user=_mysql --log-error=/opt/local/var/db/mysql5/foo.local.err --pid-file=/opt/local/var/db/mysql5/foo.local.pid

ここまで調べたところでお手上げ状態。この状態が発生したら仕方なくkillで強制終了させているけど、気分的には今一つの感が否めない。

参考: