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


我正在Laravel 5中构建一个Web应用程序。该应用程序应该将“类别名称”存储在MySQL数据库中并显示一个表单以添加新的“类别名称”。当我执行命令 php artisan serve 然后我导航到 HTTP://本地主机:8000 /管理/分类/,我收到以下错误信息:

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

根据我读到的关于堆栈溢出的几篇帖子,许多遇到此错误的用户没有正确配置.env文件,该文件覆盖了PHP数据对象(PDO)的默认设置,如database.php文件中所指定。 .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,

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


9718
2017-09-11 01:42


起源

你在宅基地上运行文件吗?还是当地人? - aldrin27
我得到同样的消息 - jstein
也许这会对你有所帮助 stackoverflow.com/questions/32373592/... - aldrin27
我知道这个建议是牵强附会但你可以试试你的PHP是最新的还是它有PDO扩展? - Gokigooooks
“如果你消除了不可能的事物,那么无论如何,无论多么不可能,都必须成为事实。”我使用的是php 5.6,它应该支持PDO扩展 - jstein


答案:


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


6
2017-09-18 16:23



对我来说,只要我在我的vm(宅基地ssh),它就会以127.0.0.1开玩笑 - Brainmaniac
对我来说,将DB_HOST更改为192.168.10.10解决了它。 - lehel


我和Wampserver有同样的问题。它对我有用:

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

并将默认端口3306更改为80.(第20和第27行,两者都有) port = 3306 to port = 80

我希望这是有帮助的。

然后转到控制面板,启动Apache和MySQL服务。


1
2017-09-11 05:10





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

来吧, env('DB_HOST', 'localhost') 是不一样的 NULL 和 env('DB_USERNAME', 'homestead') 是不一样的 homestead

你不能称之为“相同”,如明确提供的文字,缺席参数或某些功能的结果!那是三个 不同 问题!

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

mysql -hlocalhost -uhomestead -psecret homestead

对于shell,和

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

对于Laravel。


1
2017-09-11 08:03



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


原因可能是:

如果您尝试从中访问数据库 不同的服务器 然后面临的最大问题是 数据库访问仅限于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提供数据库访问是不安全的。

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

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

更改后,您已重新启动mysql服务

sudo service mysql restart

1
2018-02-14 11:19





我变了

DB_HOST =本地主机

DB_HOST =本地主机:3307

在.env文件中


1
2018-02-21 19:24





在Windows中,只需关闭用户访问权限(UAC) - 开放运行 -type msconfing并按Enter键 - 工具和寻找.UAC - 设置永不通知 - 重启PC,它会

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


0
2017-11-29 07:24





就我而言,我曾写过 .ENV 档案 DB_HOST 虚拟机的地址,如Homestead的默认值(192.168.10.10)。但它只适用于 artisan migrate。但是,使用应用程序“远程”连接此数据库需要使用127.0.0.1的IP。

希望它能帮助别人。


0
2018-04-05 10:21





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

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

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

我马上就开始了 Apache and MySQL 在Xampp控制面板中, the error was fixed。 希望这对你有用


0
2018-04-19 05:50





有时可能是缓存问题:

    php artisan config:clear

0
2018-06-01 01:03





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

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


0
2017-08-29 04:32