首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Root 密碼重置圖文教程:skip-grant-tables 模式親測可用

     編輯:MySQL 資料庫相關知識

Root 密碼遺忘是 DBA 必遇場景。本文提供生產環境驗證的標準重置流程,含安全模式操作規範、版本差異處理、驗證步驟,截圖級詳盡度。

前置安全準備(關鍵)

  • 確認服務器處於**安全網路隔離**狀態:關閉對外端口(3306)、停止應用服務、或僅允許本地回環訪問。
  • skip-grant-tables 期間**任何人無密碼可登入並修改任意數據**,風險極高。
  • 最佳環境:物理機房 Console 操作、拔網線、單用戶模式。

步驟 1:修改配置啟用跳過權限表

vi /etc/my.cnf
# 在 [mysqld] 區段添加
skip-grant-tables
# 可選:限制只聽本地
bind-address = 127.0.0.1

步驟 2:重啟 MySQL 服務

systemctl restart mysqld
# 或
service mysqld restart
# 或
/etc/init.d/mysqld restart

步驟 3:無密碼登入並重置密碼

mysql -u root
# 進入 mysql> 提示符

USE mysql;

-- MySQL 5.7.6+ / 8.0 (authentication_string 欄位)
UPDATE user SET authentication_string = PASSWORD('NewPass123!') WHERE User = 'root';

-- MySQL 5.6 / 5.7.5 及之前 (Password 欄位)
UPDATE user SET Password = PASSWORD('NewPass123!') WHERE User = 'root';

FLUSH PRIVILEGES;
EXIT;

步驟 4:恢復配置並重啟驗證

vi /etc/my.cnf
# 刪除或註釋 skip-grant-tables
# 刪除 bind-address 限制(如有)

systemctl restart mysqld

# 驗證新密碼
mysql -u root -p'NewPass123!' -e "SELECT VERSION();"
# 成功顯示版本號即重置完成

常見問題排查

現象原因解決
ERROR 1290: The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement部分版本 skip-grant-tables 隱含 --skip-networking 或禁止 FLUSH PRIVILEGES重啟時臨時添加 --skip-grant-tables 參數而非寫配置,或執行 FLUSH PRIVILEGES 前先 USE mysql
密碼修改後仍無法登入權限表 Host 匹配問題(如 'root'@'%' vs 'root'@'localhost')更新所有 root 宿主記錄:WHERE User='root' 不加 Host 條件
PASSWORD() 函數報錯MySQL 8.0.11+ 移除 PASSWORD()使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';(需正常權限模式下)

MySQL 8.0 專用簡化流程

  1. 啟用 skip-grant-tables 重啟
  2. 無密碼登入:mysql -u root
  3. 執行:FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
  4. 恢復配置重啟

核心原則:操作快、隔離嚴、驗證全、痕跡清(重置後檢查無殘留無密碼賬號)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved