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

时间:2018-12-04 06:59:21

标签: php mysql laravel artisan migrate

安装新的laravel应用5.7并尝试迁移后,出现此错误:

  

Illuminate \ Database \ QueryException:SQLSTATE [HY000] [2054]服务器请求客户端未知的身份验证方法(SQL:从information_schema.tables中选择*,其中table_schema = xxx_db,table_name =迁移)

     在

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

     

664 |抛出新的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 \ 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查看更多详细信息。

7 个答案:

答案 0 :(得分:9)

此查询解决了我的问题。

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

答案 1 :(得分:1)

请检查 phpmyadmin 上的服务器本地主机端口和 .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

答案 2 :(得分:1)

  1. 以 root 身份进入您的 mysql 并运行此查询
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';

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

  1. 运行这些命令
<块引用>

php 工匠配置:清除

php artisan 迁移

注意:这对我有用。

答案 3 :(得分:0)

  1. 重新安装MySQL,选择“旧式身份验证方法”,如iamge随附的SQL Authentication method

  2. 所示
  3. .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)  
    
  4. 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'),  
        ]) : [],  
    ],  
    
  5. 从项目终端运行php artisan migrate

答案 4 :(得分:0)

通过在.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

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

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