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

MySQL root 權限遺失緊急恢復:skip-grant-tables 實戰操作手冊

     編輯:MySQL 資料庫相關知識

誤操作導致 root 帳號權限全失(甚至無法登入),只要擁有作業系統 root/Administrator 權限,即可透過 --skip-grant-tables 跳過權限驗證,直接修復 mysql.user 表恢復完整權限。

完整恢復流程

  1. 正常停止 MySQL
    service mysqld stop
    # 或
    net stop mysql
    

    避免 pkill -9 導致 mysqld dead but subsys locked 狀態。

  2. 跳過權限表啟動
    mysqld_safe --skip-grant-tables &
    

    & 背景執行,若前台執行需另開終端。

  3. 免密登入並修復權限
    mysql
    USE mysql;
    
    -- 方案 A:逐項恢復(針對部分權限遺失)
    UPDATE user SET Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
        Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y',
        Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y',
        Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',
        Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y',
        Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y',
        Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y',
        Create_user_priv='Y', Event_priv='Y', Trigger_priv='Y',
        Create_tablespace_priv='Y', authentication_string=''
    WHERE User='root' AND Host='localhost';
    
    -- 方案 B:一次性全開(MySQL 5.5/5.6/5.7 通用欄位)
    UPDATE user SET
        Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
        Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y',
        Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y',
        Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',
        Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y',
        Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y',
        Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y',
        Create_user_priv='Y', Event_priv='Y', Trigger_priv='Y',
        Create_tablespace_priv='Y', password=''
    WHERE User='root';
    
    FLUSH PRIVILEGES;
    EXIT;
    
  4. 重啟 MySQL 正常模式
    service mysqld restart
    # 或
    mysqladmin -u root shutdown
    mysqld_safe &
    
  5. 驗證權限恢復
    mysql -u root -p
    SHOW GRANTS FOR 'root'@'localhost';
    -- 應顯示 GRANT ALL PRIVILEGES ON *.* ...
    

關鍵注意事項

  • Host 欄位必須同時包含 localhost 和 %,否則本地/遠端其中一種連線方式會失效
  • MySQL 5.7+ 密碼欄位為 authentication_string,5.6 及舊版為 password,請以 DESC user 確認
  • 8.0+ 新增 password_expired、password_last_changed 等欄位,建議執行 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; 重設密碼
  • 修復完成後務必移除 --skip-grant-tables 並重啟,否則資料庫處於完全無保護狀態

同場加映:重設 root 密碼

-- 正常模式下
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword123!';
FLUSH PRIVILEGES;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved