跳过授权表救援是什么
忘记 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 这类账号修改语句,否则会报权限相关错误。