PHP mysqli_connect连接本地MySQL报错:caching_sha2_password认证方式未知
解决MySQL认证插件错误:authentication method unknown to the client [caching_sha2_password]
嘿,这个问题我之前折腾过好几次,本质原因是MySQL 8.0及以上版本默认启用了caching_sha2_password认证插件,但你的PHP mysqli扩展版本偏旧,不支持这种新的认证方式,所以才会抛出这个错误。下面给你几个实用的解决办法,按优先级排序:
方法1:直接修改目标用户的认证插件(最推荐)
针对你代码里用的user1用户,把它的认证方式改成PHP支持的mysql_native_password就行:
- 先用root或有权限的账号登录MySQL终端:
mysql -u root -p
- 执行以下SQL语句更新用户配置:
-- 注意:如果user1允许远程连接,把localhost换成%或者指定IP ALTER USER 'user1'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass1'; FLUSH PRIVILEGES;
改完之后再跑你的PHP连接代码,基本就能正常连上了。
方法2:全局修改MySQL默认认证插件
如果需要批量处理用户,或者希望新建用户默认用旧认证方式,可以改MySQL的配置文件:
- 找到MySQL的配置文件(Linux是
/etc/my.cnf或/etc/mysql/my.cnf,Windows是my.ini,一般在MySQL安装目录下),找到[mysqld]段,添加或修改:
[mysqld] default_authentication_plugin=mysql_native_password
- 重启MySQL服务让配置生效:
- Linux用systemd的话:
sudo systemctl restart mysql
- Windows直接在服务管理器里找到MySQL服务,右键重启即可。
注意:这个配置只对新建用户生效,已经存在的用户还是得用方法1单独修改。
方法3:升级PHP及mysqli扩展
如果你的PHP版本低于7.4,建议直接把PHP升级到7.4及以上——新版本的mysqli扩展已经原生支持caching_sha2_password插件,升级后不用改任何用户或MySQL配置,直接就能正常连接。
另外提一句,你的代码里注释了user2的配置,确保当前用的user1确实是你在MySQL里配置好的账号哦~
内容的提问来源于stack exchange,提问作者Guti_Haz
相关产品推荐
相关产品推荐

