ネットサービスとかGoogleとか豆知識とか。

Index > MySQL > MySQLとlocalhost
MySQL
2006年04月20日 00:58

MySQLとlocalhost

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

同じ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の関係は、奥が深そうです。