首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux 下 MySQL 忘記 root 密碼重置全流程 (skip-grant-tables 法)

     編輯:MySQL 綜合教學

Linux 下 MySQL 忘記 root 密碼重置全流程 (skip-grant-tables 法)

接手伺服器發現無 root 密碼文檔,需重置。核心手段:啟動 mysqld 時加入 --skip-grant-tables 繞過權限驗證,免密登入修改 mysql.user 表。

⚠ 安全前提 (必讀)

  • 操作期間 MySQL 完全無密碼保護,任何人可任意登入修改資料。
  • 請在實體 Console 操作,或拔除網路線,並確認防火牆封鎖 3306 埠對外。
  • 完成後立即移除參數並重啟恢復正常權限模式。

重置步驟 (CentOS 6/7 通用)

  1. 修改配置檔加入 skip-grant-tables
    sed -i '/\[mysqld\]/a\skip-grant-tables' /etc/my.cnf
  2. 重啟 MySQL 服務
    service mysqld restart
    # 或 systemctl restart mysqld
  3. 免密登入並更新密碼
    mysql -u root
    USE mysql;
    -- MySQL 5.6/5.7
    UPDATE user SET Password = PASSWORD('NewStrongP@ssw0rd!') WHERE User = 'root';
    -- MySQL 8.0 (authentication_string)
    UPDATE user SET authentication_string = '' WHERE User = 'root';
    FLUSH PRIVILEGES;
    QUIT;
  4. 移除 skip-grant-tables 並重啟
    sed -i '/skip-grant-tables/d' /etc/my.cnf
    service mysqld restart
  5. 驗證新密碼登入
    mysql -u root -p'NewStrongP@ssw0rd!'
    # 登入成功即完成

MySQL 8.0 額外說明

8.0 移除 Password 欄位,改用 authentication_string。skip-grant-tables 下無法執行 ALTER USER,需分兩階段:

  1. skip-grant-tables 模式下 UPDATE authentication_string = '' 清空密碼。
  2. 正常模式重啟後,ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd!'; 設定強密碼。

替代方案:init-file 法 (不修改 my.cnf)

# 1. 建立 SQL 腳本
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd!';" > /tmp/reset_root.sql

# 2. 啟動時載入
mysqld --init-file=/tmp/reset_root.sql --user=mysql &

# 3. 正常登入驗證後,移除 init-file 參數重啟

此法避免修改全域配置,安全性稍高。

事後加固清單

  • [ ] 設定高強度 root 密碼 ( ≥16 字元、大小寫、數字、符號 )
  • [ ] 禁止 root 遠程登入:DELETE FROM mysql.user WHERE User='root' AND Host='%'; FLUSH PRIVILEGES;
  • [ ] 建立專用應用帳號,最小權限授權
  • [ ] 啟用密碼過期策略:ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
  • [ ] 記錄操作日誌並存檔備查
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved