PDOException::("PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109") 使用 MySQL 8 / PHP 7.2 / Laravel

Jul*_*oro 6 mysql laravel mysql-8.0 valet

我刚刚安装了我的开发环境。

当我尝试通过 SequelPro 连接 mysql db 时,我得到:

Authentication plugin 'caching_sha2_password' cannot be loaded
Run Code Online (Sandbox Code Playgroud)

如:无法加载身份验证插件 'caching_sha2_password',我运行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
Run Code Online (Sandbox Code Playgroud)

然后我可以通过 SequelPro 连接我的数据库

但是当我执行 Laravel 命令时:

php artisan migrate
Run Code Online (Sandbox Code Playgroud)

我得到:

PDOException::("PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109")
Run Code Online (Sandbox Code Playgroud)

我现在该怎么办 ?

PD:我在 Mac 上使用 Laravel Valet,而 Laravel 5.6。

abk*_*rim 8

您必须使用 mysql 命令通过 shell 更改在 Laravel 应用程序中的使用

ALTER USER 'user'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your password';
ALTER USER 'user'@'%' IDENTIFIED WITH caching_sha2_password BY 'your password';
Run Code Online (Sandbox Code Playgroud)


Chr*_*her 0

使用$ mysql -uUser -pPa$$w0rdMySQL连接后可以使用PHPmysqli_real_connect()或PDO打开

确保用户启用了缓存 sha2 密码,而不是本机密码。(PHP 7.2.9-1、MySQL 8.0.12)

当更改为本机密码时,PHP 会说

mysqli::real_connect():执行 caching_sha2 auth 时出现意外的服务器响应:109

当缓存 sha2 密码处于活动状态时,我总是得到:

mysqli::real_connect(): (HY000/1045): 用户“User”@“localhost”访问被拒绝(使用密码:YES)

因此尝试使用 Shell 从 Shell 登录$ mysql,成功了,之后我就能够使用 PHP 连接了。看起来像是 PHP mysqlnd 中的一个错误。

在打开 MySQL 连接之前实现一个shell_exec('mysql -u'.$user.' -p"'.$password.'" -e quit > /dev/null 2>&1');权限,现在对我来说解决了这个问题。

重新启动或重新启动 MySQL 服务,重置缓存的密码,并且将再次弹出访问被拒绝的消息。

希望这可以帮助。

问候