情况就是这样,我正在尝试使用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地址时,它会成功连接.
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)
在我的情况下,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 取代