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

MySQL Root 密碼遺忘完整救援指南:跳過授權表啟動、更新密碼、重新載入權限

     編輯:MySQL 資料庫相關知識

適用場景

  • Root 密碼遺失、無其他管理帳號
  • 權限表損壞導致無法登入
  • 緊急維護窗口,需最快恢復存取

標準救援流程(5 步驟)

  1. 停止 MySQL 服務
    killall mysqld
    # 或
    service mysqld stop
  2. 以跳過授權表模式啟動
    mysqld_safe --skip-grant-tables --skip-networking &
    # --skip-networking 防止外部連線介入救援過程
  3. 無密碼登入 root
    mysql -u root
  4. 更新 root 密碼
    -- MySQL 5.7.6+ / 8.0
    UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongPass!23') WHERE User='root';
    -- 或 8.0.4+ 推薦
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!23';
    
    FLUSH PRIVILEGES;
  5. 正常重啟 MySQL
    killall mysqld
    service mysqld start
    # 驗證
    mysql -u root -p'NewStrongPass!23'

修改普通用戶密碼(已知舊密碼)

mysqladmin -u username -p'oldpass' password 'newpass'
# 或 SQL
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpass');

常見坑與對策

現象原因對策
救援後仍無法登入Host 欄位不匹配(% vs localhost)同時更新 'root'@'localhost' 與 'root'@'%'
PASSWORD() 函數報錯MySQL 8.0.11+ 棄用改用 ALTER USER ... IDENTIFIED BY
FLUSH PRIVILEGES 無效--skip-grant-tables 下權限表不在記憶體必須正常重啟 mysqld 後權限才生效
啟動報 mysqld_safe: command not found路徑不在 PATH使用絕對路徑 /usr/local/mysql/bin/mysqld_safe

預防措施

  • 建立備用管理帳號:GRANT ALL ON *.* TO 'dba'@'10.0.0.%' IDENTIFIED BY '...' WITH GRANT OPTION;
  • 密碼管理工具(1Password、Bitwarden、KeePass)存儲 root 憑證
  • 定期演練救援流程,納入運維手冊

結語

Root 密碼遺忘是 DBA 必經考驡。**核心鍵點:--skip-grant-tables --skip-networking、更新 authentication_string、FLUSH PRIVILEGES、正常重啟**。將流程標準化、腳本化,讓恐慌變成肌肉記憶。

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