遺忘 MySQL root 密碼是資料庫管理常見狀況。本文提供標準、安全的重置流程,透過跳過權限表啟動臨時執行個體、更新密碼雜湊、重新載入權限三大步驟,快速恢復最高權限存取。
# systemd 系統
sudo systemctl stop mysqld
# 或舊版 init.d
sudo service mysql stop
# 確認進程已終止
ps aux | grep mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
參數說明:
--skip-grant-tables:略過權限驗證,允許無密碼登入--skip-networking:禁用網路連線,僅允許本地 socket 連線,提升安全性&:置於背景執行mysql -u root
成功進入 mysql> 提示符即表示臨時模式生效。
MySQL 5.7.6+ / 8.0+(authentication_string 欄位):
USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewStrongPass2024!') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT;
MySQL 5.7.6 以前(password 欄位):
USE mysql;
UPDATE user SET password = PASSWORD('NewStrongPass2024!') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT;
MySQL 8.0 建議改用原生語法(更安全):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass2024!';
FLUSH PRIVILEGES;
# 先終止臨時進程
sudo pkill mysqld
# 再啟動正式服務
sudo systemctl start mysqld
# 或
sudo service mysql start
mysql -u root -p'NewStrongPass2024!'
# 或互動式輸入密碼
mysql -u root -p
net stop mysql
mysqld --console --skip-grant-tables --shared-memory
# 另開視窗
mysql -u root
# 執行上述 UPDATE/FLUSH 指令
# 關閉視窗,net start mysql
| 現象 | 原因與對策 |
|---|---|
ERROR 1045 (28000): Access denied | 未確實加入 --skip-grant-tables 或舊進程未殺乾淨 |
Unknown column 'password' | 版本差異,改用 authentication_string 或 ALTER USER |
| 修改後仍無法登入 | 未執行 FLUSH PRIVILEGES 或 host 欄位不匹配(需同時更新 root@%、root@127.0.0.1、root@::1) |
mysql_secure_installation 移除匿名帳號、禁止 root 遠端登入、移除測試資料庫。掌握此標準流程,即可在密碼遺失時從容應對,將停機時間壓縮至最低,確保資料庫服務連續性。