Mysql 的 localhost 登录异常

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

点赞