一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

为什么MySQL 8.0客户端无法使用旧账号登录

时间:2026-08-21 09:54:49 编辑:袖梨 来源:一聚教程网

根本原因是客户端不支持caching_sha2_password插件,需先查SELECT user,host,plugin FROM mysql.user确认插件类型,再对'root'@'localhost'等具体host执行ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd'并FLUSH PRIVILEGES。

MySQL 8.0 客户端无法用旧账号登录,根本不是账号密码错了,而是认证插件不匹配——caching_sha2_password协议旧客户端压根不认识,握手直接失败。

为什么 ALTER USER 改了密码还是连不上

执行 ALTER USER 'user'@'host' IDENTIFIED BY 'xxx' 只改密码,不改插件,plugin 字段仍为 caching_sha2_password。Navicat、PHP mysqli、老版 JDBC 等会报 ER_NOT_SUPPORTED_AUTH_MODEAuthentication plugin 'caching_sha2_password' cannot be loaded,这不是网络或权限问题,是协议层拒认。

  1. 必须显式指定插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_pass';
  2. host 必须和你实际连接时一致:用 mysql -h 127.0.0.1 连,就得改 'root'@'127.0.0.1',不是 'root'@'localhost'
  3. 改完立刻执行 FLUSH PRIVILEGES;,否则内存缓存没刷新,新插件不生效

本地 root 登录失败的特殊陷阱

Linux 下 MySQL 8.0 默认给 root 配的是 auth_socket 插件,靠 Unix socket 认证,根本不读密码。你用 mysql -u root -p 输再多次密码都白搭。

  1. 先确认:SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
  2. 如果是 auth_socket,必须切插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pass';
  3. 切完别忘了 FLUSH PRIVILEGES;,然后新开终端重连(旧连接仍走老插件)

远程连接时 'root'@'%' 为什么还是连不上

'root'@'localhost''root'@'%' 是两条完全独立的用户记录。只改了前者,远程连 'root'@'%' 就等于在连一个没设密码、插件还是 caching_sha2_password 的空用户。

  1. 远程连接必须单独处理:CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'strong_pass';
  2. 再授权:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
  3. 同时检查 my.cnfbind-address = 0.0.0.0,否则 MySQL 根本不监听外部请求
  4. 防火墙要放行 3306 端口,否则客户端连都连不到,直接报 ERROR 2003

真正容易被忽略的点:MySQL 8.4+ 已默认不加载 mysql_native_password 插件,ALTER USER ... IDENTIFIED WITH mysql_native_password 会直接报错 Plugin 'mysql_native_password' is not loaded。降级插件只是临时解法,该升级客户端驱动的,绕不开。

热门栏目