Laravel: SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法

Posted

技术标签:

【中文标题】Laravel: SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法【英文标题】:Laravel: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 【发布时间】:2019-05-05 13:09:10 【问题描述】:

安装新的 laravel 应用程序 5.7 并尝试迁移后,我收到此错误:

Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法(SQL: select * from information_schema.tables where table_schema = xxx_db and table_name = migrations)

在 C:\xampp\htdocs\xxxxx\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664 660| // 如果尝试运行查询时发生异常,我们将 格式化错误 661| // 包含与 SQL 的绑定的消息, 这将使这个例外成为 662| // 更有帮助 开发人员,而不仅仅是数据库的错误。 663|捕捉(异常 $e)

664|抛出新的QueryException(665 | $查询, $this->prepareBindings($bindings), $e 666| ); 667| 668|

异常跟踪:

1 PDOException::("PDO::__construct(): 服务器请求 客户端未知的身份验证方法 [caching_sha2_password]") C:\xampp\htdocs\xxxxx\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=xxx_db", “根”, ”**********”, []) C:\xampp\htdocs\xxxxx\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

请使用参数 -v 查看更多详细信息。

【问题讨论】:

已经尝试过该解决方案,但没有解决我的问题。 【参考方案1】:

这个查询解决了我的问题。

 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root@123';

【讨论】:

在 Ubuntu 18.04.4 上为我工作 :) 比重新安装mysql更好的解决方案。 **注意命令。最后一个“root”(... by 'root';)是密码,而不是用户名 在 macOS 上为我工作! 在 macOS 服务器版本上为我工作:8.0.21 - Homebrew。只想提一下“some_password”也可以是您当前的工作密码,无需设置新密码。 使用 laravel 8 在 Windows Server 上为我工作【参考方案2】:
    以 root 身份进入您的 mysql 并运行此查询
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';

您可以将 1234 更改为您的密码

    运行这些命令

php 工匠配置:清除

php 工匠迁移

注意:这对我有用。

【讨论】:

【参考方案3】:

    选择 Legacy Authentication Method 重新安装 MySQL,如附加的 iamge 所示 SQL Authentication method

    .env中的数据库参数如下

    DB_CONNECTION=mysql  
    DB_HOST=127.0.0.1  
    DB_PORT=3306  
    DB_DATABASE=database_name  
    DB_USERNAME=database_username  
    DB_PASSWORD=database_password(if any)  
    

    config/database.php 中的数据库参数

    'mysql' => [  
        'driver' => 'mysql',  
        'url' => env('DATABASE_URL'),  
        'host' => env('DB_HOST', '127.0.0.1'),  
        'port' => env('DB_PORT', '3306'),  
        'database' => env('DB_DATABASE', 'database_name'),  
        'username' => env('DB_USERNAME', 'database_username'),  
        'password' => env('DB_PASSWORD', 'database_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'),  
        ]) : [],  
    ],  
    

    从项目终端运行php artisan migrate

【讨论】:

【参考方案4】:

通过在 .env 文件中提供 DB_SOCKET 可以解决这个问题:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=my_db
DB_USERNAME=root
DB_PASSWORD=
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

【讨论】:

与我的情况无关,但很高兴知道 Laravel 中的套接字配置很容易! :O【参考方案5】:

请检查 phpmyadmin 上的服务器 localhost 端口和 .env 文件,例如 (3306,3307,8889)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=mydb
DB_USERNAME=root
DB_PASSWORD=masterpass

【讨论】:

【参考方案6】:

您可以运行 Mysql installer - Community(如果您在 Windows 中),然后重新配置 mysql server 以使用旧的身份验证方法。它应该可以轻松解决您的问题。

【讨论】:

【参考方案7】:

不幸的是,您更改了 mysql 用户或密码。如果您更改了用户/密码,则转到 .env 文件并更改您的 phpmyadmin 用户和密码。给你的数据库名称

DB_DATABASE=hrms
DB_USERNAME=username
DB_PASSWORD=password

【讨论】:

【参考方案8】:

转到您的 .env 文件并确保DB_CONNECTION=mysql和数据库连接正确。

【讨论】:

以上是关于Laravel: SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005

PHP + MYSQL + Laravel - “SQLSTATE [HY000] [2002] 连接被拒绝” [重复]

SQLSTATE [HY000] Laravel 8 中的外键约束格式错误