Mysql 的 localhost 和 127.0.0.1,在 Linux 中是不同的两种方式,而通常情况是可以将 localhost 解析为 127.0.0.1,但是特殊情况时,会出现问题
问题现象
Wordpress 主机使用 localhost 访问数据库,但是同样的配置迁移到一台 VPS 上却一直提示无法连接主机,500 错误等等。
问题解释
mysql -h 127.0.0.1
的时候,使用 TCP/IP 连接, mysql server 认为该连接来自于 127.0.0.1 或者是"localhost.localdomain"
mysql -h localhost
的时候,是不使用 TCP/IP 连接的,而使用 Unix socket;此时,mysql server 则认为该 client 是来自"localhost"
解决办法
将主机的 localhost
参数改为 127.0.0.1
扩展知识
当你使用你的 IP 登录一台 mysql 服务器时,服务器会进行一次反向 DNS 解析,以允许一些用户名 @后缀是域名的用户登录。
但是这会存在一个问题,反向解析时间很长,导致 mysql 无法正常工作,或者登录失败。
解决方法则是在 my.conf 这个配置文件中增加一条 skip-name-resolve
禁止 Mysql 进行反向 DNS 解析。
此方法同时可以避免使用 IP 登录 mysql 时的莫名登录失败(其他都正常就是登录不了)以及连接缓慢
但是此方法会导致无法使用 localhost 等域名方式登录 mysql,需要更换为对应的 IP 地址。
参考链接
http://m.111cn.net/art-45518.htm
http://stackoverflow.com/questions/20723803/pdoexception-sqlstatehy000-2002-no-such-file-or-directory
http://www.jb51.net/article/30863.htm