MySQLとlocalhost
同じPC上に複数のMySQLサーバを起動。ひとつは通常のmysqldで起動するサーバで、設定ファイルはmy.cnf、ポート番号は3306。もうひとつはmysqld_multiを利用して起動するサーバで、設定ファイルは別物、ポート番号は3307。
PHPプログラムで後者のポート番号3307のほうにmysql_connectしようとしたのですが、シェルからは正常に接続できるのに、ブラウザからは接続できませんでした。PEAR::DBを使っていて、DSNはこんな感じ。
$dsn = “mysql://user:pass@localhost:” . rawurlencode($path_to_sock) . “/dbname”;
localhostだからポート番号ではなくてソケットファイルを指定したのですが、うまくいきませんでした。そこでソケットではなくポート番号に変更したところ、今度はブラウザからも接続できたように見えました。しかし、mysql_connectのリファレンスに以下のような注意書きが。
注意: サーバ名に “localhost” や “localhost:port” を指定した場合、MySQL クライアントライブラリはそれをオーバーライドし、 ローカルソケット(Windows では名前つきパイプ)に接続しようとします。 TCP/IP を用いたい場合は、”localhost” のかわりに “127.0.0.1” を用いてください。もし MySQL クライアントライブラリが 間違ったローカルソケットへ接続しようとしている場合、これを修正するには PHP 設定の mysql.default_host string に正しいパスを 指定したうえでサーバ名を空白にしておくべきです。 (mysql_connect)
ということは、localhost:3307って指定してもそれは無視されて、ソケットファイルが使われてしまうということになります。だとすると、このとき使われるソケットは前者のサーバのソケットなのでしょうか、それとも後者のほうでしょうか。前者だとするとそのポート番号は3306であり、期待する結果ではありません。ということを考えるより、注意書きにあるように「127.0.0.1:3307」って指定すればうまくいくのでしょうか。
MySQLとlocalhostの関係は、奥が深そうです。
フッキーのこれ検索に引っかかった。