F.Ko-Jiの「一秒後は未来」

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

  1. 筑紫の国の3-9の18番 より:

    フッキーのこれ検索に引っかかった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など