PHP Laravel:无法建立连接,因为目标机器主动拒绝它

Posted

技术标签:

【中文标题】PHP Laravel:无法建立连接,因为目标机器主动拒绝它【英文标题】:PHP Laravel: No connection could be made because the target machine actively refused it 【发布时间】:2015-12-07 11:17:17 【问题描述】:

我正在 Laravel 5 中构建一个 Web 应用程序。该应用程序应该获取存储在 mysql 数据库中的“类别名称”并显示一个表单以添加新的“类别名称”。当我执行命令php artisan serve 并导航到http://localhost:8000/admin/categories/ 时,我收到以下错误消息:

PDOException in Connector.php line 50:
SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.

根据我阅读的有关堆栈溢出的几篇文章,许多遇到此错误的用户没有正确配置 .env 文件,该文件覆盖了 database.php 文件中指定的 PHP 数据对象 (PDO) 的默认设置。 .env 文件定义如下:

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

database.php 文件中的 mysql 键为:

 'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'homestead'),
            'username'  => env('DB_USERNAME', 'homestead'),
            'password'  => env('DB_PASSWORD', 'secret'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,

奇怪的是,当我 ssh 进入我的虚拟机并运行 mysql -uhomestead -psecret homestead 时,我能够连接到数据库。问题是,为什么我可以使用相同的参数直接连接到 Laravel 却无法连接到 MySQL?还有什么可以拒绝访问 Laravel?

【问题讨论】:

你是通过宅基地运行你的文件吗?还是本地的? 我得到同样的信息 也许这会对你有所帮助***.com/questions/32373592/… 我知道这个建议有点牵强,但是如果你的 php 是最新的或者它有 PDO 扩展,你可以试试吗? “如果你消除了不可能,那么剩下的无论多么不可能,都必须是真理。”我正在使用 php 5.6,它应该支持 PDO 扩展 【参考方案1】:

我收到此错误是因为我忘记在 XAMPP 控制器中启动 MySQL。

【讨论】:

我的情况确实如此 有时,忘记这样的事情并开始寻找解决方案是非常令人沮丧的。大声笑!【参考方案2】:

有时可能是缓存问题:

    php artisan config:clear

【讨论】:

这可能就是答案。 太好了,有时这是因素之一......很高兴它可以帮助你 即使我尝试了优化:清除它对我没有帮助,但这个答案可以。【参考方案3】:

我将 homestead.yaml 中指定的 ip 地址从 localhost 更改为 192.168.10.10。然后我跑了homestead provision,这似乎解决了这个问题。主机无法解析 localhost 或 127.0.0.1,因为它已经映射到自身。

【讨论】:

对我来说,只要我在我的虚拟机(宅基地 ssh)上,它就可以使用 127.0.0.1 对我来说,将 DB_HOST 更改为 192.168.10.10 解决了它。【参考方案4】:

我在使用 Wampserver 时遇到了同样的问题。它对我有用:

您必须更改此文件:“C:\wamp\bin\mysql[mysql_version]\my.ini” 例如:“C:\wamp\bin\mysql[mysql5.6.12]\my.ini”

并将默认端口 3306 更改为 80。(第 20 行和第 27 行,都在) 端口 = 3306 到端口 = 80

我希望这会有所帮助。

然后只需转到您的控制面板并启动 Apache 和 MySQL 服务。

【讨论】:

对我来说,它通过删除端口值来解决,我只是将其保留为空白【参考方案5】:

为什么我可以直接使用相同的参数连接到 Laravel 却无法连接到 MySQL?

来吧,env('DB_HOST', 'localhost')NULL 不同,env('DB_USERNAME', 'homestead')homestead 不同

您不能将诸如显式提供的文字、缺少的参数或某些函数的结果等不同的事物称为“相同”!这是三个不同的事情!

只有在两种情况下提供字面意思相同的参数时,您才能说“相同”:

mysql -hlocalhost -uhomestead -psecret homestead

对于外壳,和

'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'homestead',
        'username'  => 'homestead',
        'password'  => 'secret',

对于 Laravel。

【讨论】:

没错,我正在调用一个函数来导入连接参数。不幸的是,当我用文字键值对填充数组时,我仍然收到相同的错误消息。【参考方案6】:

我遇到了同样的问题并阅读了互联网上的所有答案,但没有一个有帮助!终于找到了答案,我希望这个解决方案对某人有所帮助。

我只是将我的 DB_PORT 设置为 33060,问题就解决了。

【讨论】:

我尝试了很多地方和方法来更改端口,但最后,将它切换回 MySQL 的 3306 是最简单的答案。【参考方案7】:

原因可能是:

如果您尝试从不同的服务器访问数据库,那么面临的大多数骗子问题是数据库访问仅限于 localhost/127.0.0.1

解决方法:你可以修改my.cnf(在Ubuntu上再次位于/etc/mysql/my.cnf)并更改如下:

bind-address   = 0.0.0.0

bind-address   = SERVER_PUBLIC_IP_ADDRESS

我建议创建一个 db 用户而不是 root 并删除 root 使用,因为使用 root 用户从任何 IP 提供 DB 访问是不安全的。

如果您尝试从同一服务器连接数据库:

解决方案:只使用 TCP/IP 而不是 Unix 套接字。您可以在连接时使用 127.0.0.1 而不是 localhost 来执行此操作。不过,Unix 套接字可能使用起来更快、更安全。

修改后重启mysql服务

sudo service mysql restart

【讨论】:

【参考方案8】:

我变了

DB_HOST=本地主机

DB_HOST=localhost:3307

在 .env 文件中

【讨论】:

【参考方案9】:

我曾经遇到过同样的问题,但在我自己的情况下,我是在本地服务器上运行的。后来发现错误:

"PDOException with a message 'SQLSTATE[HY000] [2002] 无法建立连接,因为目标机器主动拒绝了它。”

是因为我还没有启动Apache and MySQL in Xampp 控制面板,所以应用程序无法获取所需的结果,因为没有连接。

我立即在 Xampp 控制面板the error was fixed 中启动了Apache and MySQL。 希望这对你有用

【讨论】:

【参考方案10】:

这似乎很明显,但有时 WAMP 或 XAMP 运行时会出现一些问题,或者它们没有打开,因此它们可能会导致此问题。

【讨论】:

【参考方案11】:

在 Windows 中,只需关闭用户访问权限 (UAC) .-打开运行 - 键入 msconfing 并按 Enter - 转到工具并查找.UAC - 设置为从不通知 -重启电脑,它会

请记住在出现提示时允许它通过防火墙。

【讨论】:

【参考方案12】:

在我的情况下,我已将 VM 的地址写入 DB_HOST 中的 .env 文件,就像 Homestead 的默认地址 (192.168.10.10)。但它只适用于artisan migrate。但是,使用应用程序“远程”连接此数据库需要使用 IP 127.0.0.1。

希望对某人有所帮助。

【讨论】:

【参考方案13】:

我在使用 SQLite 数据库时遇到了这个错误。与其他环境不同,如果数据库文件不存在,可能会创建它,在 Laravel 中,我必须手动创建数据库文件。我在运行我的服务器之后创建了它;这导致我犯了这个错误。重启服务器后就OK了。

【讨论】:

【参考方案14】:

检查您的 XAMPP(如果您正在使用)。我一遍又一遍地遇到同样的错误,直到我意识到我的 xampp 没有启用或离线,所以我启用了我的 xampp,然后它终于可以工作了。

【讨论】:

【参考方案15】:

我刚从 ubuntu homestead 切换到 windows,就发生了这种情况。我所做的是将环境更改为:

DB_HOST=本地主机 DB_PORT=33060

还可以: cd ~/代码/项目名称/ 然后运行 php工匠配置:清除

【讨论】:

【参考方案16】:

在 env 文件中我更改了 ==>

CACHE_DRIVER=redis

CACHE_DRIVER=file

现在它正在工作。

【讨论】:

【参考方案17】:

我遇到了类似的问题,但就我而言,我忘记启动 apache 和 MySQL。当 Apache 和 MySQL 未运行时,您将无法访问数据库。

【讨论】:

【参考方案18】:

我遇到了同样的问题。终于找到了答案,我希望这个解决方案对某人有所帮助。

php 工匠配置:清除

别忘了启动 xaamp 或 wamp 服务器。

【讨论】:

【参考方案19】:

如果您使用的是 Bitnami Wamp Stack,您需要确认 MySQL 数据库的 PORT 也已配置。

Picture

如果您想使用不同于预定义的 3306 的端口,那么您可以将 config/database.php 文件配置为

'port' => env('DB_PORT', '3306'), 取决于您用于项目的连接类型

【讨论】:

【参考方案20】:

照亮\数据库\查询异常 SQLSTATE[HY000] [2002] 由于目标机器主动拒绝,无法建立连接

当我遇到这个错误时,我试图通过清除缓存来摆脱它

php artisan config:clear
php artisan cache:clear

它没有帮助,但我记得 Xampp(我的本地服务器)没有启动。

【讨论】:

【参考方案21】:

我收到这个错误是因为 mySql 和 apache 在 php artisan serve 之前没有启动。

【讨论】:

以上是关于PHP Laravel:无法建立连接,因为目标机器主动拒绝它的主要内容,如果未能解决你的问题,请参考以下文章

PHP Laravel:无法建立连接,因为目标计算机主动拒绝它

因为目标机器主动拒绝而无法建立连接?

连接被对方​​拒绝:10061:无法建立连接,因为目标机器主动拒绝它

.NET 4 新的 TCP 客户端无法连接:无法建立连接,因为目标机器主动拒绝它

无法建立连接,因为目标机器主动拒绝它 127.0.0.1

无法使用 monotorrent 下载 torrent(“无法建立连接,因为目标机器主动拒绝它”)