MySQLのlocalhost接続API

MySQLにはC言語用のAPIが用意されており,例えばMySQLサーバに接続するには,次のような関数が使われます.

MySQL :: MySQL 5.6 リファレンスマニュアル :: 23.8.7.53 mysql_real_connect()

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

ここで,接続先のホスト名には注意書きがあり,

hostの値をホスト名かIPアドレスにすることができます。hostがNULLまたはストリング"localhost"である場合、ローカルホストへの接続と仮定します:Windowsに対して、サーバが共有メモリー接続を有効にしている場合、クライアントはメモリー接続を使って接続します。さもなければ、TCP/IPが使われます。Unixの場合、クライアントはUnix専用のソケットファイルを使って接続します。

とあります.

他の言語のAPIも,MySQL社のC言語APIを踏襲しておりますので,PHPからでもRuby/MySqlからでも,この注意は同様です.

http://jp.php.net/manual/ja/function.mysql-connect.php

mysql_connect
(PHP 4, PHP 5, PECL mysql:1.0)
mysql_connect MySQL サーバへの接続をオープンする
(中略)
注意: サーバ名に "localhost" や "localhost:port" を指定した場合、MySQL クライアントライブラリはそれをオーバーライドし、 ローカルソケット(Windows では名前つきパイプ)に接続しようとします。 TCP/IP を用いたい場合は、"localhost" のかわりに "127.0.0.1" を用いてください。

さて,ここで危うくハマりかけたのが,私の同僚.
私が設定したMySQLでは,MySQL-Proxyを用いてデータベース読み込みの負荷分散をしておりました.
MySQL Proxy - なぜか数学者にはワイン好きが多い
デフォルトでは,MySQL-Proxyは,TCPでポート4040にアクセスすることで,各MySQLサーバにアクセスできます.
今回は,同僚はMySQL-Proxyが動いているマシン上でPHPのプログラムを書いていました.

どうしても,MySQL-Proxy経由でMySQLサーバに接続できません.
これは,localhostと書いてしまったので,TCPポート4040を使わずに,UNIXソケットが使われてしまったからでした(すぐに気付いたのは,さすが.).
localhostを,自分自身のプライベートなIPアドレス,又は127.0.0.1に書き換えることで,無事にTCPポート4040経由でMySQLサーバにアクセスができました.

めでたしめでたし.