MySQL Root 密碼遺忘是 DBA 與開發人員的常見痛點。本文提供標準、安全、跨平台(Linux/Windows)的重置流程,涵蓋 MySQL 5.7、8.0 版本差異,並說明原理與注意事項。
跳過權限表驗證(--skip-grant-tables)啟動 MySQL 服務 → 以無密碼 Root 登入 → 更新 mysql.user 表的 authentication_string 欄位 → 刷新權限 → 正常重啟服務。
systemctl stop mysqld
# 或
service mysql stop
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
# 建立臨時配置檔(避免修改主配置)
cat > /etc/my.cnf.d/skip-grant.cnf <<'EOF'
[mysqld]
skip-grant-tables
skip-networking # 僅本地連線,提高安全性
EOF
systemctl start mysqld
mysql -u root
-- MySQL 5.7
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
-- MySQL 8.0+ (authentication_string 不再用 PASSWORD())
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
rm /etc/my.cnf.d/skip-grant.cnf
systemctl restart mysqld
# 驗證新密碼
mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"
net stop mysql(或 MySQL80 等服務名)C:\mysql-init.txt 內容:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=C:\mysql-init.txt --console
net start mysqlUPDATE ... SET authentication_string = PASSWORD(...),必須用 ALTER USER ... IDENTIFIED BY ... 或 SET PASSWORD FOR 'root'@'localhost' = '...'。caching_sha2_password,舊版客戶端可能需指定 --default-auth=mysql_native_password 或建立用戶時指定 IDENTIFIED WITH mysql_native_password BY 'pwd'。validate_password 元件,新密碼需滿足長度、大小寫、數字、特殊字符要求。mysql_secure_installation(移除匿名用戶、禁止 Root 遠程登入、移除 test 資料庫)CREATE USER 'dba'@'%' IDENTIFIED BY '...'; GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%' WITH GRANT OPTION;mysqldump --system=mysql -u root -p mysql user db > grants_backup.sql| 現象 | 原因 | 解決 |
|---|---|---|
| skip-grant-tables 啟動後無法連線 | skip-networking 生效、socket 路徑錯誤 | 指定 --protocol=tcp --port=3306 或正確的 --socket 路徑 |
| UPDATE user 後 FLUSH PRIVILEGES 報錯 | MySQL 8.0 權限表結構變更 | 改用 ALTER USER 或 SET PASSWORD 語法 |
| Windows --init-file 不生效 | 路徑含空格、反斜線轉義、權限不足 | 用雙引號包裹路徑、用正斜線 /、以管理員運行 |
| 重置後應用連線失敗 | 應用配置文件仍用舊密碼 | 同步更新應用配置、連接池、Spring Cloud Config 等 |
Root 密碼重置本質是「繞過認證 → 修改憑證 → 恢復認證」。熟練掌握各版本、各平台的標準流程,配合事後安全加固,能將事故影響降至最低。建議將重置腳本納入運維手冊,定期演練,並推廣「無 Root 運維」模式(專用賬號 + 最小權限 + 審計)。