知道密码时,用 alter user 最稳妥;忘记密码时,--skip-grant-tables 是最通用方案;mysqladmin 适合脚本化但有安全风险;切勿硬编码密码或直接修改数据文件。

知道密码时,用 ALTER USER 最稳妥
MySQL 5.7.6 及以后版本(包括 MySQL 8.0+)默认禁用 password 字段,改用 authentication_string,且推荐使用 ALTER USER 而非旧语法。直接执行 SET PASSWORD 或 UPDATE mysql.user 在某些配置下会报错或不生效。
- 先登录:
mysql -u root -p,输入当前密码 - 执行修改:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPass123!'; - 不需要手动
FLUSH PRIVILEGES——ALTER USER自动刷新权限表 - 如果要同时支持远程连接,需额外授权:
CREATE USER 'root'@'%' IDENTIFIED BY 'YourNewPass123!'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
忘记密码时,--skip-grant-tables 是最通用的方案
该方式绕过权限验证,适用于所有 MySQL 版本(5.6–8.0+),但必须确保 mysqld 进程完全停止后再启动,否则新密码不会写入磁盘。
- Linux/macOS:运行
sudo systemctl stop mysqld;Windows:运行net stop mysql - 用跳过权限方式启动:
mysqld --skip-grant-tables --skip-networking &(加--skip-networking防止未授权远程访问) - 新开终端,无密码登录:
mysql -u root - 执行重置(注意字段名):
UPDATE mysql.user SET authentication_string = PASSWORD('NewPass123!') WHERE user = 'root' AND host = 'localhost';(MySQL 5.7)或ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';(MySQL 8.0+) - 务必执行
FLUSH PRIVILEGES;,否则修改不持久 - 关掉
--skip-grant-tables进程,再用正常方式启动服务
mysqladmin 命令适合脚本化操作,但有安全风险
它不进 SQL 层,直接调用服务端接口,速度快、无需登录,但密码会暴露在进程列表和 shell 历史中。
- 已知旧密码:
mysqladmin -u root -p password 'NewPass123!'(执行后提示输旧密码) - 若旧密码为空,可省略
-p:mysqladmin -u root password 'NewPass123!' - Linux 下可通过
history -d $(history 1 | awk '{print $1}')删除刚执行的命令记录,但不能消除 /proc/*/cmdline 中的残留 - MySQL 8.0+ 默认禁用
mysql_native_password插件时,mysqladmin可能失败,需先确认插件状态:SELECT plugin FROM mysql.user WHERE user='root';
别碰 my.cnf 里硬编码密码或直接改 user.frm
这些是过时甚至危险的做法:前者只影响客户端工具(如 mysql_config_editor),后者根本无效——.frm 是表结构定义文件,不存密码;而 my.cnf 中写 password=xxx 会导致所有用该配置启动的客户端自动带密码,极易被 ps aux 窃取。
- 不要在
[client]段落里加password=xxx—— 安全性为零 - 不要尝试用文本编辑器打开
user.MYD或user.ibd手动改哈希值 —— 数据库会校验页校验和,导致崩溃 - phpMyAdmin 修改本质仍是执行 SQL,没问题;但 Web 界面若启用了「记住密码」,浏览器本地存储也可能泄露
实际重置时最容易卡在两个地方:一是没真正停掉原 mysqld 进程(尤其 macOS 上 launchd 或 Linux 上残留的 mysqld_safe),二是 MySQL 8.0+ 用户认证插件不匹配导致新密码无法验证。建议重置后立刻用 mysql -u root -p -h 127.0.0.1 测试 TCP 连接,排除 socket 权限干扰。











