php 8 连接 mysql 8 报“caching_sha2_password cannot be loaded”错误,因 mysql 8 默认认证插件与 php 8.0–8.2 的 mysqlnd 不兼容;可通过降级用户认证插件、升级 php 至 8.3+ 并启用 sha256 支持,或强制使用 unix socket 连接解决。

PHP 8 连接 MySQL 8 数据库时提示“Authentication plugin 'caching_sha2_password' cannot be loaded”,这是因 MySQL 8 默认认证插件与 PHP 8 客户端不兼容导致的连接中断。
确认当前 MySQL 用户认证方式
登录 MySQL 服务器,执行以下命令查看目标用户的 plugin 字段:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_username';
若返回结果中 plugin 值为 【caching_sha2_password】,则确认是该协议引发的错误;MySQL 8.0.4+ 默认创建用户即使用此插件,而 PHP 8.0–8.2 的 mysqlnd 扩展默认不加载对应认证模块。
方法一:临时切换用户认证插件(推荐用于开发环境)
在 MySQL 中执行以下语句,将用户认证方式降级为兼容性更强的 mysql_native_password:
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
执行后必须运行 FLUSH PRIVILEGES; 才能使变更生效。这一步不可跳过,否则 PHP 仍会按旧配置尝试连接。
方法二:升级 PHP 并启用 caching_sha2_password 支持(生产环境首选)
仅适用于 PHP 8.3+ 或已手动编译 mysqlnd 启用 sha256 支持的环境:
① 确认 PHP 编译时启用了 --with-mysqlnd 且未禁用 --enable-mysqlnd;
② 检查 phpinfo() 页面中 mysqlnd 区块是否显示 “sha256_password support => enabled”;
③ 若未启用,在 php.ini 中添加或取消注释:mysqlnd.sha256_server_cert=yes;
④ 重启 Web 服务器(Apache/Nginx)或 PHP-FPM 进程;
注意:PHP 8.2 及更早版本即使开启该选项,也无法完整支持 MySQL 8.0.28+ 引入的双证书链校验逻辑,强行启用可能导致连接随机失败。
方法三:强制客户端使用旧协议连接(绕过服务端配置)
在 PHP 连接代码中显式指定 socket 协议与认证方式:
$mysqli = new mysqli('localhost', 'user', 'pass', 'db', 3306, '/var/run/mysqld/mysqld.sock');
或使用 PDO 时传入 DSN 参数:mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=test;
该方式可跳过 TCP 层的插件协商,直接走本地 socket 通信,但仅适用于 PHP 与 MySQL 同机部署场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











