我在php MySQL中遇到了一个奇怪的问题:
php可以连接127.0.0.1
但不能连接localhost
。
如何解决这个问题?
在命令行中尝试输入ping localhost
,它可能会解析为::1:
,这是127.0.0.1的IP6等效地址。
要解决此问题,请添加(或取消注释)以下行:
127.0.0.1 localhost
在C:\WINDOWS\system32\drivers\etc\hosts
文件中
默认情况下,Windows和大多数操作系统都会在hosts文件中定义localhost。请检查以下文本文件以了解详情:
C:\WINDOWS\system32\drivers\etc\hosts
对于Mac电脑,以下是解决方法:
使用本地主机名(localhost)而非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
mysqli.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock
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/ 实现在Mac上使用本地主机连接MySQL,而不是使用127.0.0.1。
同时,查看一下MySQL数据库中定义的用户访问权限。您可以在那里定义允许连接的特定源主机的用户。您可以参考http://dev.mysql.com/doc/refman/5.1/en/connection-access.html了解更多详情。
尝试一下:
IE-->工具-->选项-->连接-->LAN设置,勾选“绕过代理服务器访问本地地址”
如果MySQL连接到127.0.0.1,则是通过TCP/IP连接,而如果连接到localhost,则是通过套接字连接。
PHP是否在正确的位置查找mysql.sock?确保php.ini和my.conf具有匹配的位置。
本地主机是否解析为IPv6地址,而不是IPv4地址,并且MySQL未侦听v4地址?
解决方案是使本地主机解析为v4地址,或使MySQL侦听v6地址。
如果您不在Windows上,请测试MySQL是否通过套接字连接,通常在本地会这样做。
使用MySQL客户端强制使用TCP
mysql -usomeone -p --protocol=TCP
vs. socket(Linux 上的默认选项)
mysql -usomeone -p
mysql -usomeone -p --protocol=socket
后者对我的someone@127.0.0.1
无效。