PHP连接MySQL 8.0失败:客户端不支持服务器认证方法
这个报错Error: The server requested authentication method unknown to the client是典型的版本兼容问题——MySQL 8.0默认启用了caching_sha2_password认证插件,但PHP7.2的mysqli扩展还不支持这种加密方式,所以才会连接失败。你之前换root账号或者修改主机地址没用,因为所有默认创建的用户都是用的这个新插件。
下面是具体的解决步骤:
第一步:登录MySQL服务器
打开终端(或命令提示符),用root账号登录MySQL:mysql -u root -p输入root密码后进入MySQL命令行界面。
第二步:确认目标用户的认证插件
执行以下SQL语句,查看你的用户(比如Don)当前使用的认证方式:SELECT user, host, plugin FROM mysql.user WHERE user = 'Don';你会看到
plugin列的值是caching_sha2_password,这就是问题根源。第三步:修改用户的认证方式为PHP兼容类型
执行ALTER USER语句,把用户的认证插件改成PHP7.2支持的mysql_native_password,同时设置密码:-- 针对本地连接的用户 ALTER USER 'Don'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; -- 针对远程连接(比如用192.168.0.1访问)的用户 ALTER USER 'Don'@'192.168.0.1' IDENTIFIED WITH mysql_native_password BY 'password';注意把
password替换成你实际的用户密码。第四步:刷新权限让修改生效
执行以下语句确保配置立即生效:FLUSH PRIVILEGES;第五步:重新测试PHP连接代码
再次运行你的PHP代码,应该就能看到Connected to MySQL的成功提示了。
额外补充:如果之后需要创建新用户,想默认使用兼容的认证方式,可以在MySQL的配置文件(my.cnf或my.ini)中添加一行:
default_authentication_plugin=mysql_native_password
保存后重启MySQL服务,这样新创建的用户都会默认使用mysql_native_password认证插件。
内容的提问来源于stack exchange,提问作者Don

