清理預設帳號時不慎刪除 root,且未授予任何權限,導致無法管理資料庫。此時可利用 MySQL 的 --skip-grant-tables 參數啟動服務,跳過權限驗證,直接操作 mysql.user 表恢復 root 權限。
service mysqld stopmysqld_safe --skip-grant-tables &
& 表示背景執行,若無背景執行需另開終端機。
mysql 進入命令列USE mysql;
INSERT INTO user SET User='root', Host='localhost', ssl_cipher='', x509_issuer='', x509_subject='';
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';
注意:此模式下無法使用 GRANT 指令,只能直接 UPDATE 權限欄位。不同版本欄位名稱可能略有差異,請以 DESC user 確認。
FLUSH PRIVILEGES;
退出後以正常模式重啟 MySQL,即可使用 root 完整權限登入。
--skip-grant-tables 會讓 MySQL 啟動時不載入權限系統,任何連線均擁有不受限制的存取權。此參數同時會抑制外掛、UDF 與排程事件載入。若 MySQL 編譯時加入 --disable-grant-options,則無法使用此參數。