MySQL使用127.0.0.1但不使用localhost?

时间:2010-02-17 19:25:32

标签: php mysql windows-7

我在php MySQL中有一个奇怪的问题:

php与127.0.0.1连接,但不与localhost连接。

如何解决这个问题?

9 个答案:

答案 0 :(得分:8)

在命令行中尝试ping localhost,它可能会解析为::1: IP6,相当于127.0.0.1

要修复它,请添加(或取消注释)该行:

   127.0.0.1       localhost
C:\WINDOWS\system32\drivers\etc\hosts

中的

答案 1 :(得分:5)

localhost必须在您的hosts文件中定义,默认情况下在Windows和大多数操作系统上都是如此。

检查以下文本文件,看看是什么:

C:\WINDOWS\system32\drivers\etc\hosts

请注意“hosts”是文件,没有扩展名,它不是文件夹。这个文件应该是空的,如果你看到你的AV /垃圾邮件阻止程序添加了大量指向127.0.0.1的条目或者讨厌的恶意软件已经写入垃圾,尽管新条目低于旧条目。 Localhost应该是该文件中的第一个条目。

答案 2 :(得分:3)

对于mac,这是解决方案:

在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

注意:根据您的设置,您可能还需要在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/

答案 3 :(得分:2)

另请查看定义用户访问权限的mysql数据库。您可以定义允许给定用户连接的源主机。您可以参考http://dev.mysql.com/doc/refman/5.1/en/connection-access.html了解更多详情

答案 4 :(得分:2)

我记得这是Windows上Mysql的长期记录功能。关于本地套接字工作方式的东西。

答案 5 :(得分:1)

尝试:

IE - >工具 - >选项 - >连接 - > LAN设置检查绕过代理服务器以获取本地地址

答案 6 :(得分:1)

如果MySQL连接到127.0.0.1,它通过TCP / IP连接,而如果连接到localhost则通过套接字连接到。 PHP正在寻找适合mysql.sock的地方吗?确保php.ini和my.conf具有匹配的位置

答案 7 :(得分:0)

localhost是否解析为IPv6地址,而不是IPv4,并且MySQL没有侦听v4地址?

解决方法是让localhost解析为v4地址,或让MySQL侦听v6地址。

答案 8 :(得分:0)

如果你不在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