密码过期机制说明
- MySQL 5.7版本后,
mysql.user表结构变更:password字段替换为authentication_string,新增password_expired字段标记密码状态。
- 默认root密码登录时,检测到
password_expired=Y,触发限制:除ALTER USER外,所有语句被拒绝执行。
修复步骤(无验证模式)
1. 停止MySQL服务
- 命令:
systemctl stop mysql 或 killall mysql
- 确保所有进程终止,避免端口占用
2. 跳过授权表启动
- 执行:
mysqld_safe --skip-grant-tables
- 启动后,MySQL不验证密码,允许无凭证登录
3. 客户端登录
- 直接执行:
mysql -u root
- 无密码提示,进入后不受
password_expired限制
4. 查看用户状态
- SQL:
SELECT authentication_string, password_expired FROM mysql.user WHERE user='root';
- 确认当前
authentication_string和password_expired值
5. 更新密码与过期标识
- 命令:
UPDATE mysql.user SET authentication_string=PASSWORD('yourpassword'), password_expired='N' WHERE user='root';
-
yourpassword替换为实际新密码
6. 刷新权限
FLUSH PRIVILEGES;
- 使修改立即生效,无需重启
7. 验证结果
- SQL:
SELECT authentication_string, password_expired FROM mysql.user WHERE user='root';
-
password_expired显示为N,表示已禁用过期
8. 正常重启服务
- 命令:
service mysql start
- 禁止使用
--skip-grant-tables参数
9. 新密码登录测试
- 使用:
mysql -u root -p
- 输入新密码,确认可正常执行查询
配置文件优化(my.cnf)
| 配置项 |
作用 |
参数示例 |
default_password_lifetime |
控制密码过期天数,0为不过期 |
default_password_lifetime = 0 |
validate_password_policy |
密码强度策略等级,0为低 |
validate_password_policy=0 |
validate_password_length |
密码最小长度,可设为5 |
validate_password_length=5 |
skip-grant-tables |
跳过授权验证,仅临时调试
|
不保留在正式配置中 |
- 修改前备份
my.cnf
- 重启服务生效:
systemctl restart mysql
主要功能
-
密码过期状态重置:通过
UPDATE直接设置password_expired='N',输入为root用户名,输出为解除语句执行限制
-
授权表跳过启动:使用
--skip-grant-tables参数,输入为MySQL服务进程,输出为无密码登录模式,仅限维护使用
-
密码强度动态配置:通过
validate_password_policy和validate_password_length调整,输入为0-2等级值,输出为对应密码策略
-
过期时间全局禁用:设置
default_password_lifetime=0,输入为配置文件参数,输出为所有用户密码永不过期
-
权限刷新机制:
FLUSH PRIVILEGES命令,输入为已修改的授权表数据,输出为内存中权限缓存同步
如何使用
- 停止服务后,用
mysqld_safe --skip-grant-tables启动
- 直接登录,执行
UPDATE语句修改密码和过期状态
- 执行
FLUSH PRIVILEGES,重启服务
- 用新密码登录,验证是否可正常执行语句
竞品对比
| 对比维度 |
主机实测方案 |
直接ALTER USER |
图形化工具重置 |
| 操作路径 |
停止服务→跳过授权→UPDATE→重启 |
登录后执行ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
|
通过phpMyAdmin等工具,进入用户管理页面修改 |
| 适用场景 |
密码过期导致无法执行任何语句 |
密码已知但需要修改 |
有图形界面且MySQL服务正常 |
| 依赖条件 |
需系统root权限、MySQL服务可停 |
需当前密码有效、能执行SQL |
需Web服务器、数据库连接正常 |
| 风险等级 |
中(需停服,有临时无验证窗口) |
低(在线操作) |
低(图形化操作) |
| 额外步骤 |
需手动FLUSH PRIVILEGES并重启 |
自动生效,无需刷新 |
部分工具自动刷新权限 |
应用场景
-
新安装MySQL 5.7+后:首次登录时密码过期,导致无法执行
SELECT或SHOW DATABASES等操作
-
密码策略调整后:
default_password_lifetime配置变更,现有root密码被标记为过期
-
忘记root密码:结合
skip-grant-tables模式,可跳过认证直接重置
-
批量服务器维护:多台Linux主机需统一处理MySQL root密码过期问题
适用人群
- Linux运维人员,需管理MySQL 5.7以上版本
- 数据库管理员,处理密码过期导致的访问故障
- 开发测试人员,在本地或测试环境初始化MySQL后遇到登录限制
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!