host名に localhost を指定してPDO経由で接続すると以下エラーが発生して接続できない。
SQLSTATE[HY000] [2002] No such file or directory
ちなみにコンソールから mysql -u user -p
をやると繋がる。ユーザ権限は以下のように localhost を許可している。
mysql> select user,host from mysql.user; +-----------+---------------+ | user | host | +-----------+---------------+ | user | localhost | | mysql.sys | localhost | | root | localhost | +-----------+---------------+
いろいろ調べた結果、以下で解決できた。
まずはユーザ権限に 127.0.0.1 を追加。
mysql> GRANT ALL PRIVILEGES ON db.* TO user@"127.0.0.1" IDENTIFIED BY "password" with grant option; mysql> select user,host from mysql.user; +-----------+---------------+ | user | host | +-----------+---------------+ | user | 127.0.0.1 | ←これ追加 | user | localhost | | mysql.sys | localhost | | root | localhost | +-----------+---------------+
そんで PDO から繋ぐときに localhost
ではなく 127.0.0.1
を指定。これで無事接続できた。
理由っぽいのは多分これ…か?
http://php.net/manual/ja/function.mysql-connect.php
注意: サーバー名に "localhost" や "localhost:port" を指定した場合、MySQL クライアントライブラリはそれをオーバーライドし、 ローカルソケット(Windows では名前つきパイプ)に接続しようとします。 TCP/IP を用いたい場合は、"localhost" のかわりに "127.0.0.1" を用いてください。
スシロー ≫