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

2022-08-30 08:56:09

我正在尝试使用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();
}
?>

我一直在使用postman进行测试以查看连接是否正常工作,但我不断收到此错误消息:

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

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

连接失败:SQLSTATE[HY000] [2002] 没有此类文件或目录

这是因为我已经将服务器名称设置为localhost,通过将其更改为IP地址,它为我提供了连接被拒绝,我不知道出了什么问题。

任何有关这方面的帮助将不胜感激。


答案 1

我发现连接不起作用的原因,这是因为连接在需要连接到端口8889时尝试连接到端口8888。

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

这修复了问题,尽管将服务器名称更改为localhost仍然会给出错误。

连接失败:SQLSTATE[HY000] [2002] 没有此类文件或目录

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


答案 2

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

//on ubuntu server
sudo /etc/init.d/mysql start

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

$ sudo initctl stop mysql
$ sudo initctl start mysql

要验证工作,您可以检查服务的状态并获取进程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

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


推荐