無論是接手舊專案、久未登入測試環境,還是單純手滑改密忘記記錄,MySQL Root 密碼遺失都是 DBA 與開發者的常見痛點。本文提供 Windows 與 Linux 兩大平台的標準重置流程,步驟清晰、驗證過可直接上手。
net stop mysql)。mysql\bin 目錄,啟動跳過授權檢查的臨時實例:
mysqld --skip-grant-tables視窗將卡住不返回提示符,代表成功進入「免密模式」。
bin 目錄,免密登入:
mysql -u root
-- MySQL 5.6 及以前
USE mysql;
UPDATE user SET password=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
-- MySQL 5.7 / 8.0 (authentication_string 欄位)
USE mysql;
UPDATE user SET authentication_string=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
\q)、關閉第一個 CMD 視窗(Ctrl+C 結束 mysqld 進程)、正常啟動 MySQL 服務,即可用新密碼登入。C:\>cd D:\MySQL\bin
D:\MySQL\bin>mysqld --skip-grant-tables
...(卡住,開新視窗)...
D:\MySQL\bin>mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD('520') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> \q
my.cnf + 重啟 + 更新 + 還原同樣利用 skip-grant-tables 讓 mysqld 啟動時不載入權限表,進而免密登入修改密碼。但 Linux 環境下務必先確保伺服器處於安全狀態(關閉對外端口、停止應用服務、最好在 Console 本地操作甚至拔網線),防止免密期間被惡意竄改。
/etc/my.cnf,在 [mysqld] 區段加入:
skip-grant-tables
systemctl restart mysqld 或 /etc/init.d/mysqld restart。mysql -u root
USE mysql;
UPDATE user SET authentication_string=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
QUIT;
my.cnf 中剛加的 skip-grant-tables,重啟 MySQL 服務,驗證新密碼生效。ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';,更符合新版認證機制。user 表的 host 欄位,確保 root@'%' 或 root@'localhost' 符合實際連線來源。skip-grant-tables,操作完成必須還原配置並重啟。掌握「跳過授權表 → 免密登入 → 更新 user 表 → 刷新權限 → 還原配置」這套通用邏輯,無論 Windows 還是 Linux,MySQL Root 密碼重置都能從容應對。收藏備查,關鍵時刻救急又專業。