根本原因是新用户创建后未显式授权且mysql 8.0+默认不赋予usage权限,导致无法登录;同时caching_sha2_password认证不兼容、host匹配失败及未执行flush privileges也是常见诱因。

根本原因不是创建失败,而是新用户没有被授予任何权限,MySQL默认拒绝未授权用户的连接请求。
新用户创建后必须显式授权
phpMyAdmin界面点击“添加用户”只执行了CREATE USER语句,但不会自动附加GRANT。MySQL 8.0+ 更严格,默认连USAGE权限都不给,导致用户能存在,却无法执行任何操作,包括登录。
- 即使你勾选了“全局权限”,phpMyAdmin 5.2+ 版本在 UI 上的该选项有时不会真正写入权限表,需手动确认
- 检查方式:用 root 登录后执行
SELECT host, user, authentication_string FROM mysql.user WHERE user = 'your_user';,若authentication_string为空或为NULL,说明用户可能未设密码或认证插件异常 - 常见错误现象:输入正确用户名密码后跳回登录页、提示
#1045 Cannot log in to the MySQL server
MySQL 8.0+ 的 caching_sha2_password 认证问题
如果你用 phpMyAdmin 创建的是 MySQL 8.0+ 用户,默认使用caching_sha2_password插件,而旧版 PHP(如 7.x)或某些 phpMyAdmin 部署环境不支持该认证方式,会直接报错The server requested authentication method unknown to the client。
- 临时解决:创建用户时指定旧认证方式:
CREATE USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; - 或修改已有用户:
ALTER USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; - 注意:改完必须执行
FLUSH PRIVILEGES;,否则不生效
host 匹配失败是隐形杀手
MySQL 用户是'user'@'host'组合,'test'@'localhost' 和 'test'@'%' 完全是两个用户。phpMyAdmin 默认尝试用localhost连接,但如果你创建时填的是%或127.0.0.1,就可能因 host 不匹配被拒绝。
- 查看当前所有用户:
SELECT user, host FROM mysql.user; - 确保你创建的用户 host 是
localhost(不是127.0.0.1),除非你明确配置 phpMyAdmin 使用 TCP 连接 - 若需兼容两者,可分别授权:
CREATE USER 'test'@'localhost' IDENTIFIED BY '123'; GRANT ALL ON *.* TO 'test'@'localhost'; CREATE USER 'test'@'127.0.0.1' IDENTIFIED BY '123'; GRANT ALL ON *.* TO 'test'@'127.0.0.1';
最容易被忽略的是:权限变更后没执行FLUSH PRIVILEGES;,或者改了用户认证方式但没重启 MySQL 服务(部分场景下必需)。这两步看似简单,却是 70% 以上“创建后无法登录”问题的终点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











