PHP连接失败:SQLSTATE [HY000] [2002]连接被拒绝

Jon*_*nck 43 php mysql pdo

情况就是这样,我正在尝试使用PHP连接来连接我在phpmyadmin上的MySQL数据库.关于连接只是试图查看连接是否成功,没什么好看的.我使用MAMP来托管数据库,我尝试使用的连接是这样的:

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

try {
    $conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
?>
Run Code Online (Sandbox Code Playgroud)

我一直在使用postman来测试连接是否正常,但我一直收到此错误消息:

连接失败:SQLSTATE [HY000] [2002]连接被拒绝

在我收到以下错误消息之前:

连接失败:SQLSTATE [HY000] [2002]没有这样的文件或目录

这是因为我已经将servername设置为localhost,通过将其更改为IP地址,它给了我拒绝连接,我不知道有什么问题.

任何有关这方面的帮助将不胜感激,谢谢.

Jon*_*nck 39

我找到了连接无法正常工作的原因,这是因为当需要连接到端口8889时,连接尝试连接到端口8888.

$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password); 
Run Code Online (Sandbox Code Playgroud)

这解决了问题,虽然将服务器名称更改为localhost仍然会出错.

连接失败:SQLSTATE [HY000] [2002]没有这样的文件或目录

但是,当为服务器名称输入IP地址时,它会成功连接.

  • 你是怎么弄清楚正确的港口的?默认情况下不是本地主机端口8080?使用tcp协议时是否会改变? (2认同)

Goh*_*ahi 16

docker我在所有容器都是docker容器并且用于迁移的环境中度过了相当多的时间Phinx。只是为了分享不同配置的不同响应。

工作解决方案

"host" => "db", // {docker container's name} Worked
"host" => "172.22.112.1", // {some docker IP through ipconfig - may change on every instance - usually something like 172.x.x.x} Worked
Run Code Online (Sandbox Code Playgroud)

非工作解决方案

"host" => "127.0.0.1", // SQLSTATE[HY000] [2002] Connection refused
"host" => "docker.host.internal", //  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name does not resolve
"host" => "localhost", //  SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

我是Phinx按照以下方式跑步的。

docker compose --env-file .env run --rm phinx status -e development
Run Code Online (Sandbox Code Playgroud)

  • 实际上对我来说,工作是将本地主机更改为服务名称 (3认同)

vin*_*nod 8

在我的情况下,MySQL 服务器没有运行。我重新启动了 MySQL 服务器并解决了问题。

//on ubuntu server
sudo /etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)

为避免 MySQL 停止问题,您可以使用 Ubuntu 14.04 LTS Linux 中的“initctl”实用程序来确保服务在出现故障或重启时重新启动。在执行此操作之前,请考虑讨论根卷的快照(mysql 已停止)以保留数据[8]。您可以使用以下命令通过具有停止和启动操作的“initctl”实用程序来管理 mysql 服务。

$ sudo initctl stop mysql
$ sudo initctl start mysql
Run Code Online (Sandbox Code Playgroud)

要验证工作,您可以检查服务的状态并获取进程ID(pid),通过杀死“mysql”进程来模拟失败,并在一段时间后(通常在1分钟内)验证其状态为使用新进程ID运行使用以下命令。

$ sudo initctl status mysql         # get pid
$ sudo kill -9 <pid>                # kill mysql process
$ sudo initctl status mysql         # verify status as running after sometime
Run Code Online (Sandbox Code Playgroud)

注意:在最新的 Ubuntu 版本中,initctl 被 systemctl 取代