適用場景
- 忘記 root 密碼。
- 誤刪 root 帳號。
- 權限表損壞導致無法登入。
步驟總覽
- 停止 MySQL 服務。
- 以
--skip-grant-tables 啟動(跳過權限檢查)。
- 免密登入,修改密碼或重建用戶。
FLUSH PRIVILEGES 生效。
- 正常重啟 MySQL。
Windows 環境
net stop mysql
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --skip-grant-tables --skip-networking
# 新開啟終端機
mysql -u root
-- 在 mysql> 提示符下
UPDATE mysql.user SET authentication_string = NULL WHERE User = 'root';
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
# 關閉 --skip-grant-tables 進程,正常啟動服務
net start mysql
Linux 環境
systemctl stop mysqld
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking --user=mysql &
mysql -u root
-- mysql> 內執行
UPDATE mysql.user SET authentication_string = '' WHERE User = 'root';
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
killall mysqld_safe
systemctl start mysqld
MySQL 5.7 / 8.0 語法差異
| 版本 | 密碼欄位 | 設定密碼語法 |
| 5.7 | authentication_string | UPDATE ... SET authentication_string = PASSWORD('pwd') |
| 8.0 | authentication_string | ALTER USER 'root'@'localhost' IDENTIFIED BY 'pwd'; |
重建 Root 帳號(若被刪除)
CREATE USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安全加固建議
- 執行
mysql_secure_installation:移除匿名用戶、禁止遠端 root 登入、移除 test 庫。
- 使用強密碼策略(
validate_password 插件)。
- 建立專用應用帳號,最小權限原則,禁用 root 應用連線。
- 啟用 SSL/TLS 加密傳輸。
- 定期審計
mysql.user、mysql.db 權限表。