【问题标题】:laravel php artisan migratelaravel php 工匠迁移
【发布时间】:2018-12-02 07:30:12
【问题描述】:

当我运行php artisan migrate

在 Connection.php 第 664 行:

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

在 Connector.php 第 68 行:

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

在 Connector.php 第 68 行:

PDO::__construct(): 服务器请求客户端未知的身份验证方法 [caching_sha2_password]

我该如何解决?

【问题讨论】:

    标签: php mysql laravel pdo


    【解决方案1】:

    您的 php mysql 扩展不支持您正在运行的 MySQL 服务器版本。

    我假设您正在运行 MySQL 8.0,这是本文发布时的新版本。

    您需要更新或重建 PHP 以支持最新版本的 MySQL,或降级您的 MySQL 服务器版本。

    另一种解决方案是使用 mysql_native_password 选项创建用户。

    CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
    

    【讨论】:

    • 我遇到了同样的问题,所以我按照您的最后建议进行了更正。事实上,我必须使用 MySQL CLI 来创建具有该选项的用户,因为我正在输入的最新版本的 MySQL Workbench (8.0.11rc) 不允许您这样做。我可以将Standard 选为Authentication Type 进行创建,但是一旦我应用这些更改,它就会自动更改为caching_sha2_password 并显示为灰色,因此我无法再次更改它。我什至在选项文件中将mysql_native_password 设置为default_authentication_plugin
    • @Sturm,老实说,我什至不会碰 MySQL 8.0。除非您绝对需要其中一项新功能,否则不值得麻烦和可能的不稳定。
    • 我倾向于同意,@Devon。其实我不是故意的。我只是做了一个简单的brew updatebrew upgrade,没有意识到它会清除我的旧 MySQL 安装,用新的 8.0 版本替换它。
    【解决方案2】:

    对于

    PDO::__construct(): 服务器请求客户端未知的身份验证方法 [caching_sha2_password]

    问题,有一个日本博客对此进行了介绍:

    https://qiita.com/r641y/items/7f0ca12ced72363f9448

    总而言之,您可以通过命令行登录mysql,然后将密码类型从caching_sha2_password更改为mysql_native_password类型。

    在mysql中实现这个的代码是:

    ALTER USER 'user'@"localhost" IDENTIFIED WITH mysql_native_password BY 'password'
    

    您可以将 'user' 和 'password' 替换为 mysql 的用户名和密码。

    然后再次在mysql中:

    mysql> FLUSH PRIVILEGES;
    

    完成后,记得更新 .env 文件的 ()

    DB_USERNAME= 和 DB_PASSWORD= 。

    下面有一个关于如何访问 .env 文件的示例视频: https://laracasts.com/series/laravel-from-scratch-2017/episodes/4?autoplay=true

    希望这会有所帮助! 它适用于我的 macbook pro high sierra。

    【讨论】:

      【解决方案3】:

      在你的查询 mysql 上运行这个脚本,只需你的新密码就可以了

      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'
      

      【讨论】:

        【解决方案4】:

        MySQL 8 & Laravel:服务器请求客户端未知的身份验证方法

        所以,这里是修复。您可以使用 PHP 的 MySQL 数据库驱动程序仍然期望的“旧”身份验证机制创建用户。

        CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
        
        GRANT ALL PRIVILEGES ON db_name.* TO 'user_name'@'localhost';
        
        ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
        

        然后重启mysql服务器

        sudo service mysql restart;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-29
          • 2016-07-08
          • 1970-01-01
          • 2019-04-22
          • 2015-12-18
          • 2017-11-29
          • 2017-12-12
          • 2016-02-11
          相关资源
          最近更新 更多