Root 密碼遺失是 DBA 經典噩夢場景。本文提供 Windows 與 Linux 兩大平台、多種技術路線的密碼重置方案,涵蓋 --skip-grant-tables、mysqld_safe、systemd 等核心技術點,助您在停機時間最短化前提下安全找回最高權限。
所有重置方案本質相同:以 --skip-grant-tables 參數啟動 MySQL 實例,使伺服器跳過 mysql.user 權限表驗證,允許無密碼以 root 身分登入,進而更新密碼雜湊值。
net stop mysql(或 net stop mysql80 視服務名而定)mysqld --skip-grant-tables --console(保持視窗開啟)mysql -u rootFLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd';
-- 或舊版語法
UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongP@ssw0rd') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
--skip-grant-tables 實例(Ctrl+C),正常啟動服務:net start mysqlmysql -u root -pC:\mysql-init.txt 內容如下:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd';
net stop mysql mysqld --init-file=C:\\mysql-init.txt --console
# 1. 停止服務 sudo systemctl stop mysqld # 2. 建立臨時 systemd override 啟用 skip-grant-tables sudo systemctl edit mysqld # 編輯器中輸入: [Service] ExecStart= ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking # 3. 重載配置並啟動 sudo systemctl daemon-reload sudo systemctl start mysqld # 4. 免密登入更新密碼 mysql -u root # 執行 FLUSH PRIVILEGES; ALTER USER ...; # 5. 移除 override 並正常重啟 sudo systemctl revert mysqld sudo systemctl daemon-reload sudo systemctl restart mysqld
# 1. 停止服務 sudo /etc/init.d/mysql stop # 2. 後台啟動跳過權限 sudo mysqld_safe --skip-grant-tables --skip-networking & # 3. 免密登入更新密碼 mysql -u root # 執行密碼更新 SQL # 4. 正常重啟 sudo pkill mysqld_safe sudo /etc/init.d/mysql start
MySQL 8.0 預設啟用 validate_password 元件,新密碼需滿足:
可暫時降低策略:SET GLOBAL validate_password.policy=LOW; 重置完成後恢復。
mysql.user 表:移除匿名帳號、遠端 root、測試資料庫REQUIRE SSLmax_connect_errors、skip-name-resolve 減少暴力破解面掌握跨平台重置技巧固然重要,但建立「不依賴記憶體的密碼管理體系」才是根治之道。