使用 PHP 连接 MySQL 8的时候,可能会发生如标题所示的错误:

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

发生这种错误,是由于MySQL 8默认使用了新的密码验证插件:caching_sha2_password,而之前的PHP版本中所带的mysqlnd无法支持这种验证。解决这个问题,有两种办法。

一种办法是升级PHP支持MySQL 8的新验证插件。

PHP 7.2.8和PHP 7.1.20已经可以支持 caching_sha2_password,直接连接MySQL 8。

截止PHP 7.0.31和PHP 5.6.37还无法支持 caching_sha2_password,不知道后续版本是否会做出支持。

可以通过phpinfo()函数了解当前安装的PHP是否支持 caching_sha2_password

43949-7b3gl92t998.png

如果不能升级PHP,可以在MySQL 8中创建(或修改)使用 caching_sha2_password 插件的账户,使之使用mysql_native_password,这样先前版本的PHP就可以连接使用了。

在 CREATE USER 时,使用 IDENTIFIED WITH xxx_plugin BY 'password',比如:

CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

使用ALTER USER修改已有账户的验证插件:

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

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

采用前一种方式,账户的密码将被清除;BY子句将为账户设置新的密码。

/etc/my.cnf 配置文件中,有一行:

# default-authentication-plugin=mysql_native_password

请删除注释符号“#”并重新启动 mysqld 使之生效,此后创建的账户均默认使用 mysql_native_password

如果您完成 MySQL Server 的安装之后,在没有启动过 mysqld 服务的情况下修改 /etc/my.cnf 配置,那么启动 mysqld之后创建的 'root'@'localhost' 账户也是使用 mysql_native_password 插件的。

标签: none

添加新评论