MySQL 密码修改可通过多种方式实现,不同方法适用于不同版本和场景,以下是综合操作指南:
一、推荐方法:ALTER USER 语句(适用 MySQL 5.7+)
sqlCopy Code
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password'; -- 修改指定用户的密码:ml-citation{ref="1,7" data="citationList"}
操作步骤:
- 登录 MySQL:
mysql -u root -p(输入当前密码)7 - 执行
ALTER USER语句,例如:sqlCopy CodeALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; -- 修改本地 root 密码:ml-citation{ref="2,7" data="citationList"}
- 刷新权限:
FLUSH PRIVILEGES;(部分版本可省略,但建议执行)6
注意事项:
- MySQL 8.0+ 默认使用
caching_sha2_password插件,需确认兼容性8 - 若需指定加密方式,可添加
WITH mysql_native_password参数8
二、传统方法:SET PASSWORD 语句(适用旧版 MySQL)
sqlCopy Code
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password'); -- MySQL 5.7.6 前支持:ml-citation{ref="1,4" data="citationList"}
限制:
PASSWORD()函数在 MySQL 5.7+ 已弃用,8.0+ 移除16- 仅建议用于旧版本维护场景6
三、命令行工具:mysqladmin
bashCopy Code
mysqladmin -u root -p password 'new_password' # 通过旧密码直接修改:ml-citation{ref="3,4" data="citationList"}
步骤:
- 输入当前密码验证
- 自动完成密码更新,无需登录 MySQL 命令行3
四、直接修改 mysql.user 表(需谨慎操作)
sqlCopy Code
UPDATE mysql.user
SET authentication_string = PASSWORD('new_password') -- MySQL 5.7.6 前使用 password 字段:ml-citation{ref="4,6" data="citationList"}
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES; -- 必须执行权限刷新:ml-citation{ref="4,6" data="citationList"}
注意事项:
- MySQL 8.0+ 需使用
authentication_string字段并生成 SHA2 哈希值68 - 修改后需重启服务或执行
FLUSH PRIVILEGES46
五、忘记密码时的重置方法(需停机操作)
- 停止 MySQL 服务
- 启动 MySQL 时跳过权限验证:
bashCopy Code
mysqld --skip-grant-tables # Windows/Linux 均适用:ml-citation{ref="4" data="citationList"}
- 无密码登录后使用
ALTER USER或直接修改mysql.user表46 - 重启服务并验证新密码
六、版本兼容性总结
| 方法 | MySQL 5.7- | MySQL 8.0+ |
|---|---|---|
ALTER USER |
✓(推荐)27 | ✓(强制推荐)78 |
SET PASSWORD |
✓(部分弃用)1 | ✗ |
直接修改 user 表 |
✓(需加密)46 | ✓(需 SHA2 哈希)8 |
最佳实践:生产环境优先使用
ALTER USER,避免直接操作系统表;遗忘密码场景需结合--skip-grant-tables紧急处理47。