最准最快方法是直接修改MySQL用户认证插件:先查SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';若plugin为caching_sha2_password,则执行ALTER USER 'your_user'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_password';及同理改'%',再FLUSH PRIVILEGES;。

直接改 MySQL 用户的认证方式,别折腾 PHP 或 ThinkPHP 配置——这是最准、最快、对所有环境都生效的办法。
先确认是不是这个插件惹的祸
用 root 登进 MySQL 命令行,执行:
SELECT user, host, plugin FROM mysql.user WHERE user = '你的数据库用户名';
重点看 plugin 这一列。如果显示 caching_sha2_password,且你用的是 PHP 8.0(非 8.4+)或没更新 mysqlnd 驱动,那基本就是它了。注意:'user'@'localhost' 和 'user'@'%' 是两个用户,得分别查、分别改。
立即学习“PHP免费学习笔记(深入)”;
使用tbot机器ID身份文件配合tsh CLI,通过Teleport访问控制SSH登录托管主机或执行远程命令。
用 ALTER USER 强制切回兼容模式
在 MySQL 中执行(把 your_user、your_password、host 换成你实际的值):
- ALTER USER 'your_user'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_password';
- ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
- FLUSH PRIVILEGES;
⚠️ 关键细节:
- ThinkPHP 默认走 TCP 连接,所以
'127.0.0.1'比'localhost'更常用,别写错; - 必须带 BY 'xxx',否则会清空密码,账号直接锁死;
- 执行完 FLUSH PRIVILEGES 才真正生效,不重启 MySQL 也 OK。
ThinkPHP 配置要同步微调
改完服务端后,检查 config/database.php:
-
hostname 写成 '127.0.0.1',别用
'localhost'(避免 Unix socket 解析歧义); - 确认 username 和 password 与上面 ALTER USER 里设的一致;
- 不用加任何额外参数,PDO 会自动适配 mysql_native_password,代码零改动。
其他可能卡点顺手清掉
如果还连不上,再快速扫两眼:
- 检查 phpinfo(),确认 pdo_mysql 扩展已启用;
- 云服务器或 Docker 环境,确认 MySQL 端口(默认 3306)没被防火墙拦住;
- Navicat / DBeaver 等工具连过旧配置的,关掉重开——它们会缓存握手参数,不刷新就白改。


















