必须用支持过期密码协议的客户端重置或禁用过期策略,因mysql 5.7+默认启用密码过期机制,set password在密码过期时被拒绝(报错1862),老客户端不触发重置流程;正确做法是使用mysql shell或新版mysql客户端交互式重置,或通过alter user禁用过期。

直接改密码不解决过期问题,必须用支持过期密码协议的客户端重置,或禁用该用户的过期策略。
为什么 set password = password('xxx') 会失败?
MySQL 5.7+ 和 8.0 默认启用密码过期机制,set password 命令在密码已过期状态下会被拒绝执行(报错 ERROR 1862 (HY000)),除非你用的客户端明确声明支持过期密码流程(如 MySQL Shell、新版 mysql 客户端)。老版本命令行工具(如 mysql 5.6 客户端)或某些 GUI 工具(如旧版 Navicat、DBeaver)不触发该流程,直接报错退出。
- 错误现象:
mysql -u root -p输入正确旧密码后仍报Your password has expired - 根本原因:服务端检测到
password_last_changed+default_password_lifetime已超期,且客户端未发送密码更新请求 - 不是密码错了,是“登录成功但被立刻拦截”
用 MySQL Shell 或新版 mysql 客户端重置密码
这是最安全、最标准的做法,无需停服务、不绕权限表,且自动处理过期状态。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
- 确认客户端版本:运行
mysql --version或mysqlsh --version,确保 ≥ 5.7.11 或 ≥ 8.0.4 - 连接时输入旧密码:
mysql -u root -p→ 回车 → 输入旧密码 → 回车 - 此时会进入交互式密码重置流程,提示你输入新密码(不是 SQL 命令)
- 若没触发流程,换用
mysqlsh --uri=root@localhost:3306,它强制走完整认证链
用 ALTER USER 绕过过期限制(需已有管理员会话)
如果你已经能进 MySQL(比如通过 skip-grant-tables 启动,或有其他未过期的管理员账号),优先用 ALTER USER 直接禁用过期或设新密码。
- 禁用单个用户过期:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; - 为用户设新密码并解除过期:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass123'; - 全局关闭过期(不推荐生产环境):
SET GLOBAL default_password_lifetime = 0; - 注意:
flush privileges;不影响密码过期逻辑,此处不需要执行
跳过权限表登录(仅应急,Linux/macOS/Windows 通用)
当所有客户端都无法触发重置流程,且无其他管理员账号时,才用此法。本质是临时关闭权限验证,风险高,操作完必须清理。
- 编辑配置文件:
my.cnf(Linux/macOS)或my.ini(Windows),在[mysqld]下加一行:skip-grant-tables - 重启 MySQL:
sudo systemctl restart mysqld(Linux)或服务管理器中重启 - 免密登录:
mysql -u root(不加-p) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass123';(MySQL 5.7+)或UPDATE mysql.user SET authentication_string = PASSWORD('newpass123'), password_expired = 'N' WHERE user = 'root';(仅限 5.7 且已知字段名) - 删掉配置里的
skip-grant-tables,再重启服务
真正容易被忽略的是:MySQL 认为 'root'@'localhost' 和 'root'@'%' 是两个完全独立的用户,查过期状态必须带 host;另外,default_password_lifetime 是全局默认值,但每个用户可被单独设置过期策略,ALTER USER ... PASSWORD EXPIRE NEVER 的优先级永远高于全局配置。










