首页/数据/数据库速查/忘记 root 密码:跳过授权表救援

忘记 root 密码:跳过授权表救援

极端手段:临时以 --skip-grant-tables 启动改密码,改完立即恢复;仅限本地救援,且必须断开网络暴露面。

数据库速查数据更新于 2026-10-13

跳过授权表救援是什么

忘记 root 口令时,标准救援路径是临时以 --skip-grant-tables 启动实例,跳过权限校验登入后重置口令,再恢复正常启动。这是极端手段:跳过授权表期间任何能连上实例的人都拥有全部权限,因此在操作期间必须同时加 --skip-networking 只允许本机操作。救援完成后要立刻恢复标准启动方式,否则安全防线会一直处于关闭状态。

基本信息

关键参数--skip-grant-tables 跳过授权校验;--skip-networking 关闭网络监听
必需前提能登录服务器主机并操作服务进程
收尾动作改完口令后正常关闭实例,再以标准方式启动
8.0 注意跳过授权表状态下需要先刷新权限才能执行账号修改语句
风险等级操作期间实例对所有可连接方完全开放

典型使用场景

  • root 口令丢失:唯一账号无法登录时按标准流程重置
  • 配置错误导致无法登录:误改认证相关参数后无法认证,需要用该方式恢复
  • 本地演练:在测试实例上完整走一遍流程,熟悉步骤与副作用
  • 应急手册核对:把流程与校验步骤写进运维手册,避免真实故障时手忙脚乱
  • 审计整改:确认历史上是否有过长期以该方式运行实例的情况

救援流程

救援流程
# 1) 先停止服务,避免两个实例同时占用数据目录
systemctl stop mysqld
# 2) 跳过授权表并关闭网络监听,只允许本机 socket 操作
mysqld_safe --skip-grant-tables --skip-networking &
# 3) 本机无口令登入
mysql -uroot
# mysql> FLUSH PRIVILEGES;                                    -- 8.0 需先刷新才能改账号
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStr0ng#Pass';
# mysql> exit
# 4) 用正常方式关闭并恢复标准启动
mysqladmin -uroot -p shutdown
systemctl start mysqld
# 5) 用新口令验证,并确认服务恢复正常监听
mysql -uroot -p -e 'SELECT VERSION();'

风险与对策

风险后果对策
跳过授权表期间对外开放任何人可无口令登录并读写全部数据必须同时加 --skip-networking
忘记恢复标准启动实例长期处于无权限校验状态救援后立刻重启并核对启动参数
数据目录被两个实例同时打开数据损坏风险先停服务再启动救援实例
未记录操作过程事后无法说明谁在什么时间改了什么全过程留痕并记录变更
--skip-grant-tables 期间实例完全没有权限校验。务必配合 --skip-networking 只走本机 socket,并确保操作窗口内没有人能通过网络连上实例。
8.0 下跳过授权表状态要先用 FLUSH PRIVILEGES 让授权表重新生效,才能执行 ALTER USER 这类账号修改语句,否则会报权限相关错误。

易错点

  • 救援时忘记加 --skip-networking:实例在无权限校验状态下对网络开放,等同于数据完全裸奔
  • 救援完成后没有恢复标准启动方式:安全防线持续关闭,直到下一次有人发现
  • 数据目录被两个实例同时打开:服务未停就启动救援实例,可能造成数据损坏
  • 8.0 下跳过授权表直接执行账号修改:未刷新权限时报错,需先执行 FLUSH PRIVILEGES
  • 改完口令不做验证:没有用新口令实测登录,可能出现「以为改好了其实没生效」的情况

数据来源与参考

  • MySQL 8.0 Reference Manual: How to Reset the Root Password

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌