Laravel 7 SQLSTATE [HY000] [2002] 连接被拒绝

Posted

技术标签:

【中文标题】Laravel 7 SQLSTATE [HY000] [2002] 连接被拒绝【英文标题】:Laravel 7 SQLSTATE[HY000] [2002] Connection refused 【发布时间】:2020-12-04 12:16:42 【问题描述】:

我的 Laravel 项目有问题。我是几个小时前开始的,但我遇到了一个 SQL 错误:

SQLSTATE[HY000] [2002] 连接被拒绝

我已经搜索了几个小时,但我发现它是错误的密码或错误的端口,但我检查了一下,这对我来说很好。

这是 .env 文件:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3302
DB_DATABASE=test_technique
DB_USERNAME=root
DB_PASSWORD=

这是 .env.example 文件:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3302
DB_DATABASE=test_technique
DB_USERNAME=root
DB_PASSWORD=

这是database.php

'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3302'),
        'database' => env('DB_DATABASE', 'test_technique'),
        'username' => env('DB_USERNAME', 'root'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

并检查mysql的端口:

Test for TCP
Your port 3302 is used by a processus with PID = 2292
The processus of PID 2292 is 'mysqld.exe' Session: Services
The service of PID 2292 for 'mysqld.exe' is 'N/A'
N/A means that there are no service related to PID 2292
Processus 'mysqld.exe' is launched by service 'wampmysqld64' with PID 5048

Test for TCPv6
Your port 3302 is used by a processus with PID = 2292
The processus of PID 2292 is 'mysqld.exe' Session: Services
The service of PID 2292 for 'mysqld.exe' is 'N/A'
N/A means that there are no service related to PID 2292
Processus 'mysqld.exe' is launched by service 'wampmysqld64' with PID 5048

mysql中的USERNAME和PASSWORD我从来没有改过所以不知道为什么会出现这个错误

P.S:在另一个站点,当我像这样使用 PDO 时,它可以工作:

new PDO("mysql:host=localhost:3302;dbname=test_technique;charset=utf8", "root", "",array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

【问题讨论】:

嗯。 3306,而不是 3302,是 MySQL 的默认端口。如果您 edit 您的问题更完整地解释您的特定设置,它可能会帮助我们帮助您, 我知道,但我的 3306 已经被使用,所以我切换到 3302 的 mysql。 确保您可以在命令行上使用端口 3302 连接到 mysql。mysql -u root --port=3302。如果不能,则需要更改 mysql 的配置。虽然我很好奇 3306 上运行的不是 mysql。 【参考方案1】:

MySQL 的默认端口是 3306 而不是 3302,除非你在 php.ini 中更改了端口,否则你必须像这样使用它

DB_PORT = 3306

运行此命令

php artisan config:clear

而不是使用

php artisan serve 

使用

 php -S 127.0.0.1:8000 -t public/

这可能会有所帮助,因为如果您使用 artisan serve 并对 env 进行更改,您必须终止服务并再次运行。

【讨论】:

谢谢,这行得通,我不知道如果我们想应用 .env 更改,必须杀死 artisan serve

以上是关于Laravel 7 SQLSTATE [HY000] [2002] 连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录

Laravel 5.7 迁移错误:SQLSTATE[HY000] [2002] No such file or directory

SQLSTATE[HY000] [1049] 未知数据库 'laravel'

Laravel:SQLSTATE [HY000] [2002] 连接被拒绝

Laravel 6.0 迁移 - SQLSTATE[HY000] [2002] 没有这样的文件或目录

SQLSTATE[HY000] [2002] 连接被拒绝 Laravel 5.8.35