PHP 警告:mysqli_connect(): (HY000/2002):连接被拒绝

问题描述 投票:0回答:9

我正在使用 PHP 5.5 和 MAMP(从此处下载):

我有一个像这样的基本脚本:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "root";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

当我运行此脚本时,我收到此错误:

PHP Warning:  mysqli_connect(): (HY000/2002): Connection refused in /Applications/MAMP/htdocs/test/test.php on line 7

我需要在 MAMP 或 PHP 中设置一些配置问题吗?

php mysql mamp
9个回答
32
投票

以防其他人遇到此问题,MAMP 上 mysql 的默认端口是

8889
,但 php 期望用于 mysql 的端口是
3306
。所以你需要打开MAMP,进入首选项,并将MAMP mysql端口更改为
3306
,然后重新启动mysql服务器。现在连接应该成功,主机=localhost,用户=root,pass=root。


17
投票

有时您需要在服务器中包含 mysql 数据库端口 ID,如下所示。

$serverName = "127.0.0.1:3307";

4
投票

为了让它再次工作,我刚刚删除了文件

ib_logfile0

ib_logfile1

.

来自:

/Applications/MAMP/db/mysql56/ib_logfile0 

Mac 10.13.3
MAMP:版本 4.3 (853)


1
投票

您必须将 mamp Mysql 数据库端口更改为 8889。


0
投票

就我而言,我使用的是 XAMPP,并且有一个日志告诉我错误。要找到它,请转到 XAMPP 控制面板,然后单击 MySQL 的“配置”,然后单击“打开日志”。

日志的最新数据位于底部,日志按日期、时间、一些数字和括号中的文本进行组织,可能会显示“注意”或“错误”。显示“错误”的可能是导致问题的原因。

对我来说,我的错误是导致问题的表空间,因此我删除了给定位置的数据库文件。

注意:用于安装 XAMPP 的表空间文件可能位于不同的位置,但对我来说它们位于

/opt/lampp/var/mysql
中。我认为这是基于 Debian 的发行版上 XAMPP 的典型特征。另外,我关于在控制面板中单击什么来查看日志的说明可能对您来说有点不同,因为我在基于 Ubuntu 的 Linux 发行版(Feren OS)上运行 XAMPP。


0
投票

WAMP 中,右键单击 WAMP 托盘图标,然后将端口从 3308 更改为 3306,如下所示:


0
投票

MySQL 工作得很好,直到我更新到 macOS Big Sur。当我更新到最新版本的 macOS 后,MySQL 无法按预期工作。

我在 MySQL 配置文件中添加了一个端口(我正在使用 AMPPS,但没关系,找到你的 MySQL 配置文件),然后它就开始工作了。

/Applications/Ampps/phpMyAdmin/config.inc.php

来自

$cfg['Servers'][$i]['port'] = '';

$cfg['Servers'][$i]['port'] = '3306';


0
投票

如果你使用docker,你可能会发现它很有用

我连接了mysql容器两个独立的网络:

  1. 在nodejs应用程序网络中工作正常

  2. 但是在 phpproject 网络中我遇到了这个错误

所以我通过 PowherShell 中的这个命令从 phpproject 网络进行了检查:

docker网络检查php项目

并使用 mysql 容器中的 IPv4Address 而不是 localhost 或 127.0.0.1 地址,如下所示:

$servername = "p:172.22.0.3:3306";
$username = "root";
$password = "secret";

$conn = mysqli_connect($servername, $username, $password,'database_name');

并解决了问题。

希望对你有帮助。


0
投票

如果您使用Docker,您的 MySQL 和 PHP 容器必须位于同一网络上才能进行通信。

此外,如果您使用 docker-compose 运行容器,我发现使用 mysql 的服务名称(您可以在您的

docker-compose.yml file)
中找到它,因为服务器名称是 PHP 中连接的方式(但不是
localhost
):

$server = "mysql" // "service name"
$username = "root";
$password = "password";
$database = "testdb";

$conn = new mysqli($server, $username, $password, $database);
© www.soinside.com 2019 - 2024. All rights reserved.