誤操作導致 root 帳號權限全失(甚至無法登入),只要擁有作業系統 root/Administrator 權限,即可透過 --skip-grant-tables 跳過權限驗證,直接修復 mysql.user 表恢復完整權限。
service mysqld stop
# 或
net stop mysql
避免 pkill -9 導致 mysqld dead but subsys locked 狀態。
mysqld_safe --skip-grant-tables &
& 背景執行,若前台執行需另開終端。
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;
service mysqld restart
# 或
mysqladmin -u root shutdown
mysqld_safe &
mysql -u root -p
SHOW GRANTS FOR 'root'@'localhost';
-- 應顯示 GRANT ALL PRIVILEGES ON *.* ...
localhost 和 %,否則本地/遠端其中一種連線方式會失效authentication_string,5.6 及舊版為 password,請以 DESC user 確認password_expired、password_last_changed 等欄位,建議執行 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; 重設密碼--skip-grant-tables 並重啟,否則資料庫處於完全無保護狀態-- 正常模式下
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword123!';
FLUSH PRIVILEGES;