Laravel PHP Artisan迁移

11

当我运行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]

如何解决?

4个回答

26

您的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)不允许您这样做。我可以选择“标准”作为“身份验证类型”进行创建,但是一旦我应用这些更改,它会自动更改为“caching_sha2_password”,并且变灰,因此我无法再次更改它。我甚至在选项文件中将mysql_native_password设置为default_authentication_plugin - Sturm
@Sturm,老实说,我现在不会去碰MySQL 8.0。除非你绝对需要其中的新功能,否则不值得冒险和可能的不稳定性。 - Devon
我倾向于同意,@Devon。实际上我并不是有意这么做的;我只是简单地执行了 brew updatebrew upgrade 命令,没有意识到它会清除我的旧版 MySQL 安装,并用新的 8.0 版本替换它。 - Sturm

12

针对以下问题:

PDO::__construct(): The server requested authentication method unknown to the client [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 上运行正常。

5

在您的 Mysql 查询中运行此脚本,只需输入新密码即可。

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

这有效。这正是我需要的。谢谢伙计! - Andrei Iovan

5

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接