首页 > 解决方案 > 新的 Laravel 安装(使用 Sail)具有未知的 MySQL 身份验证方法

问题描述

我已经阅读了许多讨论 MySql 8 的身份验证问题的问题,但是我的问题仍然存在。我删除了所有 docker 容器并创建了一个新的 Laravel 应用程序,这就是发生的事情。

curl -s "https://laravel.build/example-app" | bash

上述命令按预期安装了应用程序。

cd my-app
./vendor/bin/sail up

上面的命令安装了 docker 镜像并启动了它们。当我访问 http://localhost 时,我可以看到我的应用程序正在运行,我可以使用默认用户名 (sail) 和密码 (password) 从 MySql Workbench 访问 MySql。

php artisan migrate

上述命令给出如下错误消息。

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known [...]

在 Laravel 的 env 文件中,我将 DB_HOST 的值更新为 127.0.0.1,然后再次尝试该命令。

php artisan migrate

上面的命令这次给出了不同的错误消息。

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client [...]

谷歌搜索后,我以root身份访问MySql,并尝试修改sail用户的身份验证方法,如下所示。

ALTER USER 'sail'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 

上面的命令给出如下错误消息。

ERROR 1396 (HY000): Operation ALTER USER failed for 'sail'@'localhost'

我从 MySql Workbench 和 MySql 容器的命令行尝试了这个。我尝试刷新权限,但这没有帮助。

然后我尝试修改 root 用户的身份验证方法。

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

这工作得很好。但是,我随后在我的应用程序中将用户更新为 root,刷新权限,然后再次运行迁移,却收到相同的错误消息。

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client [...]

Laravel 版本是 8.48.1,MySql 版本是 8.0.25。

如何从我的应用程序访问 MySql?

标签: mysqllaravel

解决方案


事实证明这很简单。

当您使用 Sail 执行工匠命令时,您需要在它们前面加上“sail”。运行上述迁移的正确方法是:

./vendor/bin/sail artisan migrate

更多详细信息:https ://laravel.com/docs/8.x/sail#executing-artisan-commands


推荐阅读