Root 密碼遺忘是 DBA 必遇場景。本文提供生產環境驗證的標準重置流程,含安全模式操作規範、版本差異處理、驗證步驟,截圖級詳盡度。
skip-grant-tables 期間**任何人無密碼可登入並修改任意數據**,風險極高。vi /etc/my.cnf
# 在 [mysqld] 區段添加
skip-grant-tables
# 可選:限制只聽本地
bind-address = 127.0.0.1
systemctl restart mysqld
# 或
service mysqld restart
# 或
/etc/init.d/mysqld restart
mysql -u root
# 進入 mysql> 提示符
USE mysql;
-- MySQL 5.7.6+ / 8.0 (authentication_string 欄位)
UPDATE user SET authentication_string = PASSWORD('NewPass123!') WHERE User = 'root';
-- MySQL 5.6 / 5.7.5 及之前 (Password 欄位)
UPDATE user SET Password = PASSWORD('NewPass123!') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT;
vi /etc/my.cnf
# 刪除或註釋 skip-grant-tables
# 刪除 bind-address 限制(如有)
systemctl restart mysqld
# 驗證新密碼
mysql -u root -p'NewPass123!' -e "SELECT VERSION();"
# 成功顯示版本號即重置完成
| 現象 | 原因 | 解決 |
|---|---|---|
ERROR 1290: The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement | 部分版本 skip-grant-tables 隱含 --skip-networking 或禁止 FLUSH PRIVILEGES | 重啟時臨時添加 --skip-grant-tables 參數而非寫配置,或執行 FLUSH PRIVILEGES 前先 USE mysql |
| 密碼修改後仍無法登入 | 權限表 Host 匹配問題(如 'root'@'%' vs 'root'@'localhost') | 更新所有 root 宿主記錄:WHERE User='root' 不加 Host 條件 |
PASSWORD() 函數報錯 | MySQL 8.0.11+ 移除 PASSWORD() | 使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';(需正常權限模式下) |
skip-grant-tables 重啟mysql -u rootFLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';核心原則:操作快、隔離嚴、驗證全、痕跡清(重置後檢查無殘留無密碼賬號)。