mysql 8.0默认caching_sha2_password认证插件与thinkphp 5.1及旧版驱动不兼容,需改用户认证为mysql_native_password、关闭ssl校验、设charset为utf8mb4,并确保pdo底层mysql客户端库版本≥8.0。

MySQL 8.0默认认证插件不兼容ThinkPHP旧驱动
ThinkPHP 5.1及更早版本默认使用mysqlnd或pdo_mysql扩展连接数据库,但它们在PHP 7.4之前对MySQL 8.0引入的caching_sha2_password认证插件支持不完整——连接时直接报错Authentication plugin 'caching_sha2_password' cannot be loaded或Client does not support authentication protocol。
这不是ThinkPHP配置写错了,而是底层MySQL握手阶段就失败了。关键不是改database.php,是得让MySQL用户用老式插件登录。
- 登录MySQL 8.0服务器,执行:
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
- 必须执行
FLUSH PRIVILEGES;生效 - 如果用户是
localhost而非%,注意替换主机名 - ThinkPHP 6.0+已适配,但前提是PHP版本≥7.4且
pdo_mysql编译时启用了sha2支持——多数宝塔/AMH环境仍默认关着
ThinkPHP 5.1的database.php里不能只改host和port
光把MySQL升级到8.0、用户改了认证插件还不够。ThinkPHP 5.1默认没开启SSL,而某些MySQL 8.0安装(尤其云厂商RDS)强制要求SSL连接,会卡在SSL connection error或静默失败。
要显式关闭SSL校验,否则PDO底层抛异常但ThinkPHP不透出具体原因。
- 在
database.php的'params'数组里加:'options' => [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::MYSQL_ATTR_SSL_CA => null, \PDO::MYSQL_ATTR_SSL_CERT => null, \PDO::MYSQL_ATTR_SSL_KEY => null]
- 如果确定服务端没开SSL,也可以直接加
'sslmode' => 'disabled'(部分PDO版本支持) -
charset必须设为utf8mb4,MySQL 8.0默认排序规则是utf8mb4_0900_ai_ci,用utf8会触发警告甚至插入失败
PHP版本与pdo_mysql扩展的真实兼容边界
不是“PHP 7.2+就能连MySQL 8.0”。关键看pdo_mysql扩展编译时链接的MySQL客户端库版本。很多CentOS 7自带的php-pdo包依赖mysql-community-client-5.7,它压根不认识caching_sha2_password。
验证方式很简单:在终端跑php -i | grep -A5 pdo_mysql,看Client API version是不是≥8.0。如果不是,重装PHP或单独升级php-mysqlnd(推荐)比硬调认证插件更彻底。
- Ubuntu/Debian:装
php-mysqlnd而非php-mysql - CentOS:启用
remi-php74源后重装php-pdo和php-mysqlnd - Docker里用
php:7.4-apache镜像基本没问题;但php:7.2-apache即使打补丁也容易掉坑
ThinkPHP日志里只显示SQLSTATE[HY000] [2002]?先查网络和权限
这个错误码看起来像连接被拒,但实际可能是MySQL 8.0的bind-address没放开远程访问,或防火墙拦了3306。别急着翻ThinkPHP文档,先做三件事:
- 在部署PHP的机器上手动试连:
mysql -h your.mysql.host -u your_user -p,输密码看是否通 - 查MySQL错误日志:
tail -f /var/log/mysql/error.log,常有Host 'x.x.x.x' is not allowed to connect这类提示 - 确认MySQL 8.0里
skip-networking是OFF,且bind-address不是127.0.0.1(除非PHP也在同一台)
认证插件、SSL、字符集这些都得建立在TCP能通的基础上。网络不通时所有配置都是空谈。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











