MySQL 无法通过“localhost”连接,只有 127.0.0.1

dco*_*bus 27 mysql php localhost

这对我来说有点神秘。我可以连接到 MySQL 的唯一方法是,如果我通过“127.0.0.1”调用它……例如,我的 PHP 连接脚本将不适用于 localhost

我正在运行 Mac OS X Lion,内置 apache2、MySQL、PHP、phpMyAdmin

mysql管理员:

count                             0
debug-check                       FALSE
debug-info                        TRUE
force                             FALSE
compress                          FALSE
character-sets-dir                (No default value)
default-character-set             auto
host                              (No default value)
no-beep                           FALSE
port                              0
relative                          FALSE
socket                            (No default value)
sleep                             0
ssl                               FALSE
ssl-ca                            (No default value)
ssl-capath                        (No default value)
ssl-cert                          (No default value)
ssl-cipher                        (No default value)
ssl-key                           (No default value)
ssl-verify-server-cert            FALSE
user                              (No default value)
verbose                           FALSE
vertical                          FALSE
connect-timeout                   43200
shutdown-timeout                  3600
plugin-dir                        (No default value)
default-auth                      (No default value)
Run Code Online (Sandbox Code Playgroud)

Raf*_*ger 28

如果您告诉它连接到“localhost”,MySQL 将尝试连接到 unix 套接字。如果你告诉它连接到 127.0.0.1 你是在强迫它连接到网络套接字。因此,您可能将 MySQL 配置为仅侦听网络套接字而不是文件系统套接字。

很难说您的 Unix 套接字到底有什么问题。但我建议您阅读MySQL 参考指南上的此页面。这应该对你有帮助。

更新:基于更新的问题:参数“socket”应该是这样的:“/var/lib/mysql/mysql.sock”。参考手册中的这个页面有更多信息。

这是我的 /etc/my.cnf 文件的开头:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

你的文件应该是相似的。那么你的问题应该就解决了。在测试之前不要忘记重新启动 MySQL 服务器。

  • php.ini 引用了“/var/mysql/mysql.sock”(准确地说是 3 个地方),需要将其更改为“/tmp/mysql.sock”...谢谢您的帮助! (2认同)

Sil*_*ire 8

您可能启用了 IPv6,它的 localhost 很可能解析为 ipv6 localhost,这在您的 msql 配置中未定义。

我也遇到了一个问题,我必须在该用户允许的子网中添加 'localhost' 代替 '127.0.0.1',不明白为什么(我使用的是 ipv4 并且是前一段时间),但值得一试。


小智 5

对我来说,OSX 的内置 php 配置为使用与自制软件的 mysql 不同的 unix-socket。因此它无法通过使用该套接字的 localhost 进行连接。

我通过将 php 配置的套接字路径进行符号链接以指向 mysql 实际使用的一个快速 hack 来修复它。

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

以下诊断命令非常有用。

检查 php 和 mysql 使用的默认套接字路径:

php -i | fgrep 'mysql.default_socket'
mysql -e 'show variables where variable_name = "socket"'
Run Code Online (Sandbox Code Playgroud)

使用指定的套接字连接:

php -r 'var_dump(mysql_connect("localhost:/tmp/mysql.sock", "user", "pass"));'
mysql --socket=/tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

确定mysql客户端使用哪种套接字进行连接:

lsof | egrep '^mysql .*(IPv|unix)'
Run Code Online (Sandbox Code Playgroud)