PDOException::("PDO::__construct(): 使用 MySQL 8 / PHP 7.2 / Laravel 进行缓存_sha2 auth: 109 时出现意外的服务

Posted

技术标签:

【中文标题】PDOException::("PDO::__construct(): 使用 MySQL 8 / PHP 7.2 / Laravel 进行缓存_sha2 auth: 109 时出现意外的服务器响应")【英文标题】:PDOException::("PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109") with MySQL 8 / PHP 7.2 / Laravel 【发布时间】:2019-01-21 12:28:34 【问题描述】:

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

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

Authentication plugin 'caching_sha2_password' cannot be loaded

如:Authentication plugin 'caching_sha2_password' cannot be loaded 中所述,我跑了:

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

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

但是当我执行 Laravel 命令时:

php artisan migrate

我明白了:

PDOException::("PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109")

我现在该怎么办?

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

【问题讨论】:

我也有同样的问题。 :/ 你修好了吗? 是的。将mysql降级到以前的版本 我通过在my.cnf 中设置默认身份验证方法mysql_native_password 来修复它 【参考方案1】:

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

ALTER USER 'user'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your password';
ALTER USER 'user'@'%' IDENTIFIED WITH caching_sha2_password BY 'your password';

【讨论】:

【参考方案2】:

这个问题有利于安全,mybe。

但是我用命令解决了问题:

    ALTER USER root@localhost IDENTIFIED WITH caching_sha2_password BY 'password'; 重启mysql 立即尝试

希望您不会再看到此错误。

【讨论】:

【参考方案3】:

使用$ mysql -uUser -pPa$$w0rd 后,可以使用mysqli_real_connect() 或 PDO 使用 PHP 打开 MySQL 连接

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

当更改为原生密码时 PHP 说

mysqli::real_connect(): 执行缓存_sha2 身份验证时出现意外的服务器响应:109

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

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

所以尝试使用$ mysql 从Shell 登录,成功了,之后我就可以连接PHP。似乎是 PHP mysqlnd 中的一个错误。

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

重启或重启MySQL服务,重置缓存密码,再次弹出拒绝访问信息。

希望这会有所帮助。

问候

【讨论】:

这确实是一个“快速而肮脏”的解决方案,它不适合更大的应用程序。可能会对此进行官方修复。

以上是关于PDOException::("PDO::__construct(): 使用 MySQL 8 / PHP 7.2 / Laravel 进行缓存_sha2 auth: 109 时出现意外的服务的主要内容,如果未能解决你的问题,请参考以下文章

PDO:未捕获的 PDOException:找不到驱动程序

[单选题]PDO::ATTR_ERRMODE设置为以下哪个值时,PDO会抛出PDOException?

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO

PDO连接-MySQL

PDO PHP - PDOException - 数值超出范围:1264 第 1 行的列“customer_id”的值超出范围

我尝试获取时PDOException(PDO :: FETCH_ASSOC)[重复]