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

时间:2015-09-11 01:42:39

标签: php mysql laravel pdo

我正在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文件,该文件覆盖了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?

20 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

  

当我可以使用相同的参数直接连接到Laravel时,为什么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。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

我改变了

  

DB_HOST =本地主机

  

DB_HOST =本地主机:3307

<。> .env文件

答案 6 :(得分:1)

原因可能是:

如果您尝试从不同的服务器访问数据库,那么面临的大多数骗局问题是数据库访问仅限于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

答案 7 :(得分:0)

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

"PDOException with a message 'SQLSTATE[HY000] [2002]无法建立连接,因为目标计算机主动拒绝它。&#34;

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

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

答案 8 :(得分:0)

有时候可能会出现缓存问题:

    php artisan config:clear

答案 9 :(得分:0)

在我的情况下,我已经在DB_HOST写入了 .env 文件中的虚拟机地址(192.168.10.10)。但它仅适用于artisan migrate。但是,使用应用程序连接此数据库&#34;远程&#34;要求使用IP为127.0.0.1。

希望它能帮助别人。

答案 10 :(得分:0)

我在SQLite数据库中遇到此错误。与在其他环境中创建数据库文件(如果不存在)可能不同,在Laravel中,我不得不手动创建数据库文件。我在运行服务器后 创建了它;这导致我出现此错误。重新启动服务器后,一切正常。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我刚从ubuntu宅基地切换到Windows,这发生了。我所做的就是将环境更改为:

DB_HOST =本地主机 DB_PORT = 33060

也可以: cd〜/代码/项目名称/ 然后跑 php artisan config:clear

答案 13 :(得分:0)

在环境文件中,我更改了==>

CACHE_DRIVER=redis

TO

CACHE_DRIVER=file

现在可以正常工作了。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

php artisan config:clear

不要忘记启动xaamp或wamp服务器。

答案 16 :(得分:0)

如果您使用的是Bitnami Wamp Stack,则将要确认MySQL数据库也已配置的端口。

Picture

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

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

答案 17 :(得分:0)

Illuminate\Database\QueryException SQLSTATE[HY000] [2002] 无法建立连接,因为目标机器主动拒绝

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

php artisan config:clear
php artisan cache:clear

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

答案 18 :(得分:0)

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

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

答案 19 :(得分:-1)

我自己遇到同样的问题

run php artisan serve