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:无法建立连接,因为目标机器主动拒绝它