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

med*_*pir 6 php mysql migrate laravel laravel-artisan

安装新的 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| throw new QueryException(665| $query, $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\连接器.php:70

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

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

Sha*_*Sha 26

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

 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root@123';
Run Code Online (Sandbox Code Playgroud)

  • 比重新安装 mysql 更好的解决方案。**注意命令。最后一个“root”(... by 'root';)是密码,而不是用户名 (2认同)
  • 在 macOS 上为我工作! (2认同)

小智 10

  1. 以 root 身份进入 mysql 并运行此查询
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';
Run Code Online (Sandbox Code Playgroud)

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

  1. 运行这些命令

php artisan 配置:清除

php 工匠迁移

注意:这对我有用。


小智 5

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

  2. .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)  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 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'),  
        ]) : [],  
    ],  
    
    Run Code Online (Sandbox Code Playgroud)
  4. php artisan migrate从项目终端运行


Ami*_*deh 5

解决方案在这里,分两步:

步骤1.您必须编辑/etc/mysql/my.cnf文件并将此设置附加到mysqld部分:

[mysqld]
default_authentication_plugin= mysql_native_password
Run Code Online (Sandbox Code Playgroud)

步骤2.然后运行以下mysql命令:

CREATE USER 'new_root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

最好重启一下mysql服务。

   sudo systemctl restart mysql
Run Code Online (Sandbox Code Playgroud)

当你安装了mysql8并且你的代码与mysql5兼容时,就会出现这个问题


Jay*_*jay -1

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