mysql - 新的 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?
解决方案
事实证明这很简单。
当您使用 Sail 执行工匠命令时,您需要在它们前面加上“sail”。运行上述迁移的正确方法是:
./vendor/bin/sail artisan migrate
更多详细信息:https ://laravel.com/docs/8.x/sail#executing-artisan-commands
推荐阅读
- c# - WCF 消息格式化程序未格式化故障消息
- amazon-web-services - Codedeploy:提供的目标组有目标类型实例,与任务定义中指定的awsvpc网络模式不兼容
- android - 在 Kotlin 协程中等待 LiveData 结果
- python - 多线程与多处理:选择哪一个?
- amazon-web-services - VueJS 中的 AWS Amplify API - apiName 是如何形成的?
- python - 如何将日期时间打印为 UTC 字符串
- node.js - Apollo graphQL:在查询深度级别结束时从数据加载器调用调度
- c# - 创建自定义 RequestCultureProvider - 为什么没有初始化 Options 属性?
- r - 如何使用 dcast() 将 5x2 data.table 转换为 1x5 data.tabe?
- angular - 更新 Firestore 文档导致字段布尔类型更改为字符串