必须先查SELECT user,host,plugin FROM mysql.user确认插件类型,再执行ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd'并FLUSH PRIVILEGES;auth_socket用户需sudo mysql绕过登录后修改,default_authentication_plugin对已有用户无效。

确认当前用户插件类型再动手
直接执行 ALTER USER ... IDENTIFIED WITH 很容易报错,因为 MySQL 5.7 要求:只要改插件,就必须同时提供密码。先查清楚目标账号实际用的是什么插件:
执行 SELECT user, host, plugin, authentication_string FROM mysql.user WHERE user = 'your_user';
常见非原生插件有:caching_sha2_password(多见于从 8.0 导入的账号)、auth_socket(Ubuntu/Debian 默认给 root@localhost 设的)、sha256_password(启用了 RSA 密钥认证时)。如果 plugin 字段已经是 mysql_native_password,就不用改——5.7 默认就是它。
ALTER USER 必须带密码,否则报 ERROR 1827
MySQL 5.7 的 ALTER USER 不接受空密码。以下写法会失败:ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password;
正确写法必须显式指定密码:ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'real_password';
注意点:
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- 如果原密码已知,填原密码即可;如果忘了,必须设一个新密码
-
host必须完全匹配,'user'@'localhost'和'user'@'127.0.0.1'是两个独立账号 - 改完不执行
FLUSH PRIVILEGES;,变更不会生效
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 正常登录了。别试图用 UPDATE mysql.user 直接改 plugin 字段——加密方式不匹配极易锁死账户。
别碰 default_authentication_plugin 配置项
这个参数只影响新建用户的默认插件,对已有用户完全无效。MySQL 5.7 的 default_authentication_plugin 默认就是 mysql_native_password,改它没意义,还可能因配置错误导致服务启动失败。
真正要改的是具体用户,不是全局配置。如果你看到某个用户是 caching_sha2_password,那基本是手动改过、或从 8.0 dump 进来的,得一个个单独处理——没有“一键全量切换”这种安全又可靠的操作。

















