在PHP 8中,即使你已经使用了支持MySQL Native Driver (mysqlnd) 的配置选项来编译PHP,caching_sha2_password
的支持通常是通过mysqlnd本身自动处理的,而不需要额外的编译选项。caching_sha2_password
是MySQL 8的默认认证插件,它应该与正确配置的mysqlnd一起工作。
如果你发现phpinfo()
没有显示caching_sha2_password
相关的条目,这可能是因为几个原因:
- MySQL扩展未启用:确保你的
php.ini
文件中有extension=mysqli.so
(或extension=php_mysqli.dll
在Windows上)和extension=pdo_mysql.so
(或相应的DLL文件)启用。 - PHP配置未正确加载:检查
php.ini
文件的路径是否正确,并且确保重启了Web服务器(如Apache或Nginx)和PHP-FPM(如果你使用的是它)以应用更改。 - mysqlnd版本:确保你的PHP版本内置的mysqlnd支持MySQL 8。虽然PHP 8应该支持,但最好还是确认一下。
- 连接问题:如果PHP能够连接到MySQL但只是不显示认证方式,可能是因为连接时使用的用户名和密码不是通过
caching_sha2_password
插件认证的,或者MySQL服务器被配置为使用其他认证插件。 - 查看错误日志:检查PHP和MySQL的错误日志,看是否有任何相关的错误信息。
- 测试连接:编写一个简单的PHP脚本来测试MySQL连接,看是否成功,并检查是否有任何错误或警告被抛出。
- 更新或重新编译PHP:如果你怀疑PHP的编译过程有问题,你可以尝试重新编译PHP,确保所有相关的依赖项都是最新的,并且没有遗漏任何重要的配置选项。
- 检查MySQL服务器配置:确保MySQL服务器配置允许使用
caching_sha2_password
。你可以通过查看MySQL的user
表来检查用户的认证插件。
如果你已经检查了上述所有方面并且仍然遇到问题,你可以尝试以下步骤来进一步调试:
- 在PHP脚本中使用
mysqli_connect()
或PDO::__construct()
时添加错误处理,以获取更详细的错误信息。 - 在MySQL服务器上尝试使用其他认证插件的用户来连接,看看是否有问题。
- 查阅PHP和MySQL的官方文档或社区论坛,看看是否有其他人遇到了类似的问题。
最后,请注意,phpinfo()
并不总是显示所有可能的MySQL认证插件。它主要显示PHP配置和已加载的扩展信息。要确认PHP是否支持caching_sha2_password
,最好的方法是尝试使用它进行连接,并查看是否成功。
试了一下,安装一下 openssl-devel,然后在 configure 参数上加上
--with-openssl
就好了镜像:dokken/centos-stream-9
参考:252420 – 'caching_sha2_password' support missing in PHP port, limits MySQL 8 compatibility
验证
以下代码来自 ChatGPT