通过 localhost 连接 MySQL 无效,但 127.0.0.1 有效

Connect MySQL through localhost not working but 127.0.0.1 is working

OS: Ubuntu 14.04 LTS

php 版本控制: phpbrew

php 版本: 5.5.10

我对解析为 127.0.0.1 的本地主机执行了 ping 操作。

这表明我的主机(/etc/hosts)文件是正确的。

127.0.0.1 localhost

每当我尝试使用如下所示的 php 脚本连接到 MySQL 时,它都不起作用并给我错误:没有这样的目录。

    //connect to the database
    mysql_connect("localhost","root","password") or die(mysql_error());

但是,当我通过 127.0.0.1 连接时它会工作

 //connect to the database
        mysql_connect("127.0.0.1","root","password") or die(mysql_error());

此外,我的 phpmyadmin 在使用 "localhost" 登录时不起作用,我不得不更改文件以在登录期间添加 127.0.0.1 选项。

如何使用本地主机连接到 MySQL 数据库?

这个问题的答案是 my.cnf 位于

/etc/mysql/my.cnf

该行是

bind-address = 127.0.0.1 

bind-address = localhost 

应该是

bind-address = 0.0.0.0

这将允许所有连接

在许多情况下,localhost 是使用 UNIX 套接字连接到 MySQL 服务器进程的提示,其中 127.0.0.1 强制建立 TCP 连接。有时 UNIX 套接字位于意想不到的位置,或者根本无法访问,这会导致 "file not found" 错误。

插座通常类似于 /tmp/mysql.sock,也可能位于其他位置,具体取决于您的发行版以及您对其进行了多少定制。

请记住,通过定义为服务器本地的 UNIX 套接字访问和 TCP 由两个不同的规则控制。 GRANT 中的 localhost 指的是 UNIX 套接字。 % 或某些特定的主机名是指通过 TCP 进行远程访问。

PHP 仍在尝试使用默认套接字位置。如果您 将 MariaDB/MySQL 文件夹 /var/lib/mysql 移动到另一个位置,就会出现此问题。为了解决这个问题,您必须在 /etc/php.ini 文件中定义新套接字的位置。

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

注意,根据您使用的驱动程序,您可能必须指定 pdo_mysql.default_socket=!

为了检查您的当前目录运行,在mysql中执行以下命令:

select @@datadir;