【发布时间】:2011-01-18 00:45:12
【问题描述】:
我在php MySQL中有一个奇怪的问题:
php 与127.0.0.1 连接,但与localhost 不连接。
如何解决这个问题?
【问题讨论】:
-
@air:我编辑了您的问题,如果您不同意,请随时回滚。
我在php MySQL中有一个奇怪的问题:
php 与127.0.0.1 连接,但与localhost 不连接。
如何解决这个问题?
【问题讨论】:
localhost 必须在您的主机文件中定义,默认情况下在 Windows 和大多数操作系统上。
检查以下文本文件,看看发生了什么:
C:\WINDOWS\system32\drivers\etc\hosts
请注意,“hosts”是文件,没有扩展名,它不是文件夹。这个文件应该几乎是空的,如果你看到条目要么你的 AV/垃圾邮件拦截器添加了大量指向 127.0.0.1 的条目,要么讨厌的恶意软件在那里写了垃圾,尽管新条目低于旧条目。 localhost 应该是该文件中的第一个条目。
【讨论】:
试试:
IE-->工具-->选项-->连接-->局域网设置检查本地地址绕过代理
【讨论】:
还可以查看定义用户访问权限的 mysql 数据库。您可以在那里定义允许给定用户连接的源主机。更多详情可咨询http://dev.mysql.com/doc/refman/5.1/en/connection-access.html
【讨论】:
在命令行中尝试ping localhost,它可能会解析为::1: 相当于127.0.0.1的IP6
要修复它,添加(或取消注释)该行:
127.0.0.1 localhost
在C:\WINDOWS\system32\drivers\etc\hosts
【讨论】:
我记得这是 Windows 上 Mysql 的一个长期且有文档记录的功能。关于本地套接字的工作方式之类的。
【讨论】:
localhost 是否解析为 IPv6 地址,而不是 IPv4,并且 MySQL 没有监听 v4 地址?
解决办法是让 localhost 解析到 v4 地址,或者让 MySQL 监听 v6 地址。
【讨论】:
如果 MySQL 连接到 127.0.0.1,它会通过 TCP/IP 连接,而如果它连接到 localhost,它会通过套接字连接。
PHP 是否在寻找 mysql.sock 的正确位置?确保 php.ini 和 my.conf 有匹配的位置
【讨论】:
对于 Mac,这是解决方案:
使用 localhost 而不是 MAC 上的 127.0.0.1 连接到 MySQL。很长一段时间以来,我一直在使用 127.0.0.1 连接到我的开发平台上的 MySQL,因为由于某种原因 localhost 不起作用。原来是因为 127.0.0.1 使用 TCP/IP 而 localhost 使用套接字。 php.ini 文件指向了 mysql.sock 的错误位置,所以您只需更改它,重新启动 apache 即可!
Open php.ini: /private/etc/php.ini
Find the following line: mysql.default_socket = /var/mysql/mysql.sock
Replace with: mysql.default_socket = /tmp/mysql.sock
Restart apache: apachectl restart
注意:根据您的设置,您可能还需要更新 php.ini 中的这些行:
mysqli.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock
注意:如果您没有 php.ini 文件,则需要复制提供的名为 php.ini.default 的默认文件
sudo cp /private/etc/php.ini.default /private/etc/php.ini
通过http://madproject.com/general/connect-to-mysql-using-localhost-instead-of-127-0-0-1-on-a-mac/
【讨论】:
如果你不在windows上也测试mysql是否通过socket连接,本地正常。
使用 mysql 客户端强制 tcp
mysql -usomeone -p --protocol=TCP
对比套接字(linux默认)
mysql -usomeone -p
mysql -usomeone -p --protocol=socket
后者不适用于我的someone@127.0.0.1
【讨论】: