萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL root 權限遺失?skip-grant-tables 急救全紀錄

情境回顧

在 AMH 面板的 AMysql 中將 root 帳號的 Host 改為 % 以開放遠端連線,結果導致 root 所有權限被清空(所有權限欄位變為 N),等同帳號被鎖定,無法執行任何操作。

核心解法:跳過權限表啟動

  1. 正常停止 MySQL(避免 pkill 導致 mysqld dead but subsys locked):
    service mysqld stop
    
  2. 以 skip-grant-tables 模式啟動(背景執行):
    mysqld_safe --skip-grant-tables &
    
  3. 免密碼進入資料庫並修復權限:
    mysql -u root
    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'
    WHERE User='root';
    
    -- 方案 B:若方案 A 執行報錯,可改用 REPLACE 重建 root 帳號(需包含 authentication_string 欄位)
    FLUSH PRIVILEGES;
    EXIT;
    
  4. 重啟 MySQL 使權限生效:
    service mysqld restart
    

驗證與後續

登入後執行 SHOW GRANTS FOR 'root'@'%'; 確認權限完整。若順手修改密碼,記得同步更新應用程式配置檔。

關鍵提醒

  • mysql.user 表中 Host 為 localhost 與 % 兩筆記錄皆需擁有完整權限。
  • 生產環境操作前請先備份 mysql 系統資料庫。
  • 若使用 MariaDB 10.4+,password 欄位已改為 authentication_string,語法需調整。
copyright © 萬盛學電腦網 all rights reserved