警告:mysqli_connect(): (HY000/2002): 没有这样的文件或目录

Posted

技术标签:

【中文标题】警告:mysqli_connect(): (HY000/2002): 没有这样的文件或目录【英文标题】:Warning: mysqli_connect(): (HY000/2002): No such file or directory 【发布时间】:2021-01-09 03:44:33 【问题描述】:

我正在尝试在我的 Mac 上安装 vanilla 论坛,为此我刚刚从 mysql 命令行创建了一个数据库和一个用户:

mysql> CREATE DATABASE vanilla;
Query OK, 1 row affected (0.00 sec)

mysql> create user 'vanilla_user3'@'localhost' IDENTIFIED BY 'vanilla_password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'vanilla_user3'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

所以我尝试使用以下代码进行连接:

$con=mysqli_connect("localhost","vanilla_user3","vanilla_password","vanilla");
if (mysqli_connect_errno($con)) 
  echo "Failed to connect to MySQL: " . mysqli_connect_error();

但不幸的是,我收到一条错误消息

警告:mysqli_connect(): (HY000/2002): No such file or directory in /Users/kramer65/Sites/vanilla/info.php on line 3 连接 MySQL 失败:没有这样的文件或目录

知道我哪里出错了吗?

【问题讨论】:

【参考方案1】:

在主机中设置端口:

$con = mysqli_connect("localhost:**3306**","vanilla_user3","vanilla_password","vanilla");

【讨论】:

【参考方案2】:

好的,我刚刚找到了解决方案。问题原来是主机不应该是localhost,而是127.0.0.1。我一直以为localhost127.0.0.1是一样的,结果却不一样。

所以也许作为对未来用户的提示,当有疑问时,请始终使用该 ip。

【讨论】:

mohitmayank 的回答是正确的。如果localhost 不起作用,你需要告诉 PHP 在哪里可以找到你的 mysql 套接字文件。 查看我对#Adam 2016 年 11 月 21 日的回答的评论 类似问题但更简单:MySQL 未启动可能会导致相同的错误。客户的服务器几个月没有重新启动,重新启动后 mysql 没有运行,没有人想检查。太担心所有的代码库和“谁造成了这个错误”。大声笑(仅仅因为 Apache 已经启动并且您可以 ssh 进入服务器,这并不能保证 MySQL 也已启动) @TheSatinKnight 我每隔几个月也观察到一次同样的错误,这似乎与你所说的有关,因为 MySQL 服务器在那个时候暂时不可用。【参考方案3】:

/opt/lampp/etc/ 中找到php.ini 文件 然后编辑:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

在此之后,在您的数据库连接文件中从 localhost 更改为 127.0.0.1。一切都会变好。但是,如果您尝试使用 config.inc.php 文件,请确保将其全部设置为 127.0.0.1,而不是 localhost。

【讨论】:

【参考方案4】:

如果使用 docker,则使用 mysql 容器名称作为 mysql 的主机名。例如,如果这是 docker compose 文件:

mysqldb:
    image: mysql:5.7.22
    container_name: mysqlHost
    ports:
        - "33099:3306"

主机名是mysqlHost,端口是3306,而不是33099

如果您不使用 docker compose,docker ps 会显示正在运行的容器名称。

【讨论】:

【参考方案5】:

假设您的 MAMP MySQL 端口默认设置为 8889。有时仅localhost 是不够的,在这种情况下,您还必须将 MySQL 端口也放在那里,所以您可以使用localhost:8889localhost:whatever your MySQL port number is。我还是 MySQL 的新手,所以我不知道原因,但对于最近收到消息的任何人来说:Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in ... 将 MySQL 端口号添加到 localhost 对我来说是解决方法。

【讨论】:

在我认为是一个错误的情况下,localhost 确实需要在 $host 参数中添加端口(即使它是默认值 3306),但没有其他主机名。因此,您将使用“localhost:3306”作为 $host 参数。其他主机名和 IP 地址将使用 $port 参数。但是如果 $host 是 'localhost',$port 参数将被忽略。我相信问题可以追溯到 __construct() 的 PHPdoc 中的某些内容:“如果可能,将使用管道而不是 TCP/IP 协议”。【参考方案6】:

我遇到了同样的问题,但问题与 php.ini 文件有关。

我必须在/etc/php.ini(或您的php.ini 所在的任何位置)中编辑这两行:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

重新启动 apache 服务器以确保反映更改。

sudo apachectl restart

【讨论】:

这是使用套接字代替 TCP/IP 的正确答案。 mysql.sock 对我来说位于 /var/run/mysqld/mysqld.sock' 按照此处针对 Mac 用户的说明进行操作 ***.com/questions/4219970/…

以上是关于警告:mysqli_connect(): (HY000/2002): 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

警告:mysqli_connect():MySQL 服务器已消失

警告:mysqli_connect():(HY000/1045):用户'record'@'localhost'的访问被拒绝(使用密码:YES)[重复]

警告:mysqli_connect(): (HY000/2002): 没有这样的文件或目录

警告:mysqli_connect(): (HY000/1049): 仅在 mac 终端中的未知数据库

我该如何解决这个“警告:mysqli_connect():(HY000/1049):未知数据库”问题?

警告:mysqli_connect():(HY000/2002):无法建立连接,因为目标机器在[重复]中主动拒绝了它