mysql 5.7默认认证插件即为mysql_native_password,无需修改;仅当select查出plugin非此值(如caching_sha2_password、auth_socket等)时,才需用alter user显式切换并指定密码,且必须匹配host、执行flush privileges。

MySQL 5.7 默认就是 mysql_native_password,改它干啥?
MySQL 5.7 的默认认证插件本来就是 mysql_native_password,SELECT user, host, plugin FROM mysql.user 查出来基本全是这个值。如果你看到某个用户是 caching_sha2_password 或 sha256_password,那大概率是手动改过、或从 8.0 导入的账号、或用了特殊安装包(比如某些 Docker 镜像预置了非标配置)。别一上来就执行 ALTER USER ... IDENTIFIED WITH mysql_native_password——没意义,还可能因密码字段为空触发报错。
真要改,得先确认当前插件不是 mysql_native_password
执行以下语句查清楚目标用户实际用的是什么:
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'your_user';
常见非原生插件包括:
-
caching_sha2_password:几乎可以确定是误混入了 8.0 的账号或 dump 数据 -
sha256_password:通常出现在启用了 SSL 或 RSA 密钥认证的场景 -
auth_socket:Ubuntu/Debian 系统默认给root@localhost设的,靠系统用户认证,不走密码
只有当 plugin 字段明确不是 mysql_native_password 时,才需要下一步操作。
用 ALTER USER 切回原生认证,必须带新密码
ALTER USER 在 5.7 中要求显式指定密码;光写 IDENTIFIED WITH mysql_native_password 不行,会报 ERROR 1827 (HY000)(密码不能为空)。
- 正确写法:
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'real_new_password'; - 如果原密码已知且想保留,就填原密码;如果忘了,必须设一个新密码
- 执行后务必补上:
FLUSH PRIVILEGES;,否则变更不生效 - 注意
host要完全匹配——'user'@'127.0.0.1'和'user'@'localhost'是两个不同账号
遇到 auth_socket 插件时不能直接 ALTER USER
Ubuntu/Debian 安装的 MySQL 5.7 常把 root@localhost 设为 auth_socket,此时连 mysql -u root -p 都进不去。这不是密码问题,而是认证方式绕过了密码校验。
- 先用系统用户免密登录:
sudo mysql -u root - 再执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; - 立刻
FLUSH PRIVILEGES; - 退出后就能用
mysql -u root -p正常登录了
最容易被忽略的是:改完 auth_socket 用户后不重启客户端连接池或终端,旧 session 还卡在 socket 认证逻辑里,看着像没生效。











