MySQL 忘记密码:服务器上重置 root
前言
运维或开发时,经常会遇到 MySQL root 密码遗忘、交接后无人知晓的情况。
本文以 Linux 服务器上的本机 MySQL 为例,说明如何通过临时跳过权限校验来重置密码。
下文命令以常见发行版与 MySQL 5.7 / 8.x 为例,具体服务名与配置路径请按环境调整。
不涉及从备份恢复数据,也不覆盖云厂商托管库的控制台改密流程。
准备
操作前请确认你拥有服务器的 root 或 sudo 权限。
重置期间 MySQL 会短暂不可用,生产环境尽量选低峰操作。
建议先备份关键配置文件,避免改坏启动参数。
常见服务名可能是 mysqld 或 mysql。
可用下面命令确认当前状态:
1 | systemctl status mysqld |
重置步骤
核心思路是:先停库,再以 --skip-grant-tables 启动,无密码登录后改密,最后恢复正常启动。
停止服务
先停止正在运行的 MySQL,避免新旧进程抢占数据目录。
1 | sudo systemctl stop mysqld |
确认进程已退出:
1 | ps -ef | grep -E 'mysqld|mysql' | grep -v grep |
若仍有残留进程,可再确认并按需结束,避免强杀误伤其他业务进程。
跳过权限表
临时以跳过授权表的方式启动,此时无需密码即可登录。
推荐用 mysqld_safe(若系统仍提供)或直接带参数启动 mysqld。
1 | sudo mysqld_safe --skip-grant-tables --skip-networking & |
若没有 mysqld_safe,也可手动指定数据目录与用户启动(路径按安装方式调整):
1 | sudo mysqld --skip-grant-tables --skip-networking --user=mysql & |
--skip-networking 可避免重置窗口内被远程连接,降低风险。
若必须远程操作本机,可暂时去掉该参数,但务必尽快完成改密并恢复。
无密码登录
服务起来后,直接本地登录:
1 | mysql -u root |
若提示 socket 路径不对,可显式指定(示例路径,按实际调整):
1 | mysql -u root -S /var/lib/mysql/mysql.sock |
修改密码
进入 MySQL 后,先刷新权限表,再按版本改密。
MySQL 8.x 推荐使用 ALTER USER:
1 | FLUSH PRIVILEGES; |
若 root 还允许从其他主机登录,需一并修改对应账号,例如:
1 | ALTER USER 'root'@'%' IDENTIFIED BY '你的新密码'; |
MySQL 5.7 常见写法如下(部分环境仍可用):
1 | FLUSH PRIVILEGES; |
恢复启动
改密完成后,结束临时启动的 MySQL 进程,再按正常方式启动服务。
1 | sudo pkill mysqld |
用新密码验证登录:
1 | mysql -u root -p |
输入新密码后能进入,即说明重置成功。
验证
登录成功后,可简单检查当前用户与权限是否正常:
1 | SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; |
再用业务账号或应用配置做一次真实连接测试,确认应用侧也已同步新密码。
扩展
若 systemd 管理不便临时加参数,可编辑服务覆盖文件,加入启动参数后再重启。
例如创建覆盖配置:
1 | sudo systemctl edit mysqld |
在编辑器中写入类似内容(改完记得删掉或还原,勿长期开启):
1 | [Service] |
然后执行:
1 | sudo systemctl daemon-reload |
完成改密后,务必删除该覆盖配置并恢复默认 ExecStart,再 daemon-reload 与重启,避免服务长期处于无鉴权状态。
部分发行版(如 Debian/Ubuntu)还可能使用 debian-sys-maint 账户维护服务。
若本机有 /etc/mysql/debian.cnf,也可阅读其中账号密码用于本机维护,但这不等于找回你业务用的 root 密码,仍建议按上文正式重置。
总结
- 停止 MySQL 服务。
- 以
--skip-grant-tables(建议同时--skip-networking)临时启动。 - 无密码登录后执行
FLUSH PRIVILEGES与ALTER USER改密。 - 杀掉临时进程,恢复
systemctl正常启动并用新密码验证。
注意:跳过权限表期间库几乎等同于无鉴权,操作窗口尽量短。
生产环境改密后,同步更新应用、脚本与监控里的连接配置,避免连环故障。