通过localhost连接MySQL无法正常工作,但127.0.0.1正在运行

Joe*_*ons 9 mysql sockets connection localhost

操作系统: Ubuntu 14.04 LTS

php版本控制: phpbrew

php版本: 5.5.10

我ping了localhost,它解析为127.0.0.1.

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

127.0.0.1 localhost
Run Code Online (Sandbox Code Playgroud)

每当我尝试使用像下面的PHP脚本连接到MySQL时它不起作用并给我错误:没有这样的目录.

    //connect to the database
    mysql_connect("localhost","root","password") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

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

 //connect to the database
        mysql_connect("127.0.0.1","root","password") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

另外,使用"localhost"登录时我的phpmyadmin不起作用我必须在登录时更改文件以添加127.0.0.1选项.

如何使用localhost连接MySQL数据库?

tad*_*man 5

在许多情况下localhost,提示使用 UNIX 套接字连接到 MySQL 服务器进程,其中127.0.0.1强制 TCP 连接。有时 UNIX 套接字位于意外的位置,或者根本无法访问,这会导致“找不到文件”错误。

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

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


joe*_*mid 5

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

mysqli.default_socket =/newDBLocation/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

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

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

select @@datadir;
Run Code Online (Sandbox Code Playgroud)


Joe*_*ons -1

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

/etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

该行是

bind-address = 127.0.0.1 
Run Code Online (Sandbox Code Playgroud)

或者

bind-address = localhost 
Run Code Online (Sandbox Code Playgroud)

本来应该是

bind-address = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

这将允许所有连接

  • 新手注意!这个答案将使您的网站向攻击者开放。最好设置连接 127.0.0.1 并要求授权用户通过 ssh 连接。 (13认同)
  • 投反对票,0.0.0.0 依赖所有网络接口(包括公共接口)如此可靠的攻击 (3认同)