【问题标题】:Why does not "localhost" work as MySQL host, but "MyPCName" does?为什么“localhost”不能作为 MySQL 主机,但“MyPCName”可以?
【发布时间】:2012-03-10 23:01:42
【问题描述】:

我正在尝试在 Windows / IIS 7.5 上从 PHP (WordPress) 连接到 MySQL,结果如下:

define('DB_HOST', 'DevPC');        // -> works
define('DB_HOST', 'localhost');    // -> connection error

奇怪的是,在另一台机器(Windows Server + IIS 7.5)上,localhost 工作得很好。这可能是什么原因造成的?一些PHP设置? MySQL 设置?

【问题讨论】:

  • 请记住,localhost 使用域套接字(默认情况下),而不是 TCP/IP。使用 127.0.0.1 强制 TCP/IP。这可能会改变观察到的行为,尝试显式环回地址有助于缩小问题范围。

标签: php mysql localhost


【解决方案1】:

在 Unix 上,MySQL 程序对主机名 localhost 进行特殊处理,与其他基于网络的程序相比,这种方式可能与您所期望的不同。对于到 localhost 的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器。即使给定了--port-P 选项来指定端口号,也会发生这种情况。

127.0.0.1代替localhost

【讨论】:

  • 对不起,我应该指定这是在 Windows 上。是否同样的答复适用?
  • 顺便说一句,我试图将“MyPCName”更改为“127.0.0.1”,但导致连接错误。
  • @Borek:引用来自 MySQL 手册,它谈到了 UNIX,它不是 Windows,所以我会说不。如果您在 Windows 上遇到连接问题,请检查您的防火墙设置。我建议您先尝试使用命令行客户端,因为您更容易获得反馈。更改连接参数并对其进行故障排除,直到它正常工作:dev.mysql.com/doc/refman/5.5/en/mysql.html
【解决方案2】:

您应该向我们提供连接的错误输出。你确定这不是用户访问问题?请记住user@DevPC 与连接mysql 时的user@localhost 不同。即使两个主机名都转换为相同的 IP。

【讨论】:

  • 太好了,就是这样。我有一个用户将“%”作为主机匹配规则,我认为这将允许该用户来自任何主机,但显然不允许来自 localhost
【解决方案3】:

在windows中可以查看

c:\windows\system32\drivers\etc\hosts

知道是否行

127.0.0.1

本地主机在那里。

/etc/resolv.conf in linux

【讨论】:

  • 在两台机器上,127.0.0.1 规则被注释掉,并且有一条消息“本地主机名称解析在 DNS 本身内处理”。这就是为什么我觉得奇怪的是localhost 在一台机器上工作而在另一台机器上却不行。
  • 也许你的 dns 系统做错了.. 对 localhost 执行 ping 操作,看看结果如何。它应该返回 127.0.0.1
猜你喜欢
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2015-10-06
  • 2017-03-10
  • 2022-11-24
  • 2014-10-09
  • 1970-01-01
相关资源
最近更新 更多