PHP7.2.2+mysql 8.0 PDO提供:客户端未知的身份验证方法[缓存\u sha2\u密码]

PHP7.2.2+mysql 8.0 PDO提供:客户端未知的身份验证方法[缓存\u sha2\u密码],php,mysql,pdo,Php,Mysql,Pdo,我正在使用PHP7.2.2和mysql 8.0 当我尝试使用正确的凭据连接时,出现以下错误: PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]") 需要帮助来解决问题。在某个地方发现了这个问题,不记得在哪里或者我会信任它,但它对我有效,直到MySQL 8变得更好 在MySQL shell命令提示符

我正在使用PHP7.2.2和mysql 8.0

当我尝试使用正确的凭据连接时,出现以下错误:

PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")

需要帮助来解决问题。

在某个地方发现了这个问题,不记得在哪里或者我会信任它,但它对我有效,直到MySQL 8变得更好

在MySQL shell命令提示符中,无论:

CREATE USER username@localhost identified with mysql_native_password by 'password';
其中username是用户名,password是该用户的密码


然后,您可以在shell中或工作台中添加权限,因为用户现在使用的身份验证类型为:Standard。

如果您想使用MySQL>=8并且不关心缓存\u sha2\u密码,只需在安装时选择第二个选项


正如ailionx在这里建议的那样:

为了使用mySQL 8和新的身份验证方法,您可以升级PHP

MySQL 8

运行7.1.16之前的PHP版本或7.2.4之前的PHP 7.2时,请将MySQL 8服务器的默认密码插件设置为MySQL_native_password,否则即使未使用缓存_sha2_密码,您也会看到类似于服务器请求的身份验证方法的错误[caching_sha2_password]



参考资料:

MySQL 8.0还不能生产。PHP开发人员可能没有在较新的PHP版本中实现MySQL的8.0连接协议auth和缓存\u sha2\u密码。如果您将MySQL 8.0配置为在MySQL\u native\u密码模式下运行,您可能能够修复此问题。在mycnf中似乎没有可配置的选项mysql_native_password=1,也可以通过命令行从mysql客户端使用它,而且在pdo中似乎也可以作为选项使用。在MySQL 8中,引入了一个新的身份验证插件:缓存\u sha2\u密码。该插件不适用于PHP,因为PHP的mysqlnd尚未更新。如果您将PHP连接到db的mysql用户帐户转换为旧身份验证,PHP7.2.4或更高版本将与旧身份验证插件mysql_native_密码一起使用!将使用mysql_native_密码标识的用户“USER_name”@“hostname”改为“password”;在/etc/my.cnf文件中,您可以添加:default\u authentication\u plugin=mysql\u native\u password,但此默认值仅适用于以后创建的所有新帐户。谢谢!我正在修补PHP7.2.5和MySQL 8。无法通过工作台界面创建用户进行连接,但运行此查询为我完成了任务。感谢您的帮助,我在MySQL 8.0.13上成功了。这应该是公认的答案。只需使用mysqld-default authentication plugin=MySQL\u native\u password启动您的MySQL即可-console@ReidPHP已经为MySQL的缓存密码做好了准备。这句话是错误的/误导性的。我建议你把那句话从回答中删去。事实上,您继续使用mysql_native_密码插件创建一个新用户,而不是缓存_sha2_密码。PHP不支持缓存\u sha2\u密码插件,但支持mysql\u原生\u密码插件。参考资料:如果您提供了在Linux上使用bash获得相同结果的说明,我会选择这个答案。经过数小时的尝试,这是meMETHOD唯一一个没有卸载MYSQL的方法:只需下载MYSQL安装程序,然后执行它。按照说明,选择重新配置MySql服务器,并将authentication方法更改为使用遗留的Auth方法。您不需要停止mysql服务。简单快捷这是我解决的问题。没错,我必须在我的.cnf文件中混合回答和编辑[mysqld]default authentication plugin=mysql_native_password,如这里所述,我也做了与@nylujeMySQL 8的caching_sha2_密码验证插件相同的事情,到目前为止,它在PHP中根本无法工作。如果您将PHP使用的MySQL用户帐户转换为旧身份验证,则PHP 7.2.4或更高版本将与MySQL 8配合使用:通过“密码”更改用户“user_name”@“hostname”,并使用MySQL_native_密码标识;或者,您可以创建一个引用旧身份验证的新帐户。[mysqld]default\u authentication\u plugin=mysql\u native\u password指令只影响新帐户。它不会影响现有用户帐户。@James在PHP PDO中缓存_sha2_密码的状态是否有任何更新?@Meglio MySQL仍在报告:PHP:PDO_MySQL和ext/mysqli扩展不支持缓存_sha2_密码。按照此链接搜索PDO。@Meglio另外,PHP文档表明PDO不支持缓存\u sha2\u密码。参考:
alter user 'username'@'localhost' identified with mysql_native_password by 'password';