连接mysql数据库时报错:
sqlstate[hy000] [2054] the server requested authentication method unknown to the client
原因
由于mysql 8默认使用了新的密码验证插件:caching_sha2_password,而低版本的php版本中所带的mysqlnd无法支持这种验证。故报“请求客户端未知的身份验证方法”。
解决方法一
升级php支持mysql 8的新验证插件。
7.1.20 - php 7.2.8或更高版本php已经可以支持caching_sha2_password,直接连接mysql 8。检查你的php版本以确定问题。
可以通过phpinfo()函数了解当前安装的php是否支持caching_sha2_password:
解决方法二
mysql 8中创建(或修改)使用caching_sha2_password插件的账户,使之使用mysql_native_password。
- 在
create user
时,使用identified with xxx_plugin by ‘password‘
,比如:create user 'native'@'localhost' identified with mysql_native_password by 'password!2#4';
- 使用
alter user
修改已有账户的验证插件:alter user 'native'@'localhost' identified with mysql_native_password
或alter user 'native'@'localhost' identified with mysql_native_password by 'new_password'
;采用前一种方式,账户的密码将被清除;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
插件的。
也可以直接在客户端修改如图: