遺忘 MySQL root 密碼是常見運維場景,通過跳過權限表啟動實例可快速重置。本文提供標準化操作流程。
# Systemd 系統
systemctl stop mysqld
# 或 SysVinit
service mysql stop
# 確認進程已終止
ps -ef | grep mysqld
# 前台運行(調試用)
mysqld --skip-grant-tables --skip-networking &
# 或修改配置文件永久生效(my.cnf)
[mysqld]
skip-grant-tables
skip-networking # 安全建議:禁用網絡連接
# 然後正常啟動服務
systemctl start mysqld
關鍵參數說明:
--skip-grant-tables:跳過權限驗證,允許無密碼登錄--skip-networking:僅允許本地 Unix Socket 連接,防止外部未授權訪問mysql -uroot
# 進入 MySQL Shell 後執行:
FLUSH PRIVILEGES; -- 必須先執行,重新載入授權表
-- MySQL 5.7.6+ / 8.0 推薦語法
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- MySQL 5.7.6 之前
UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
# 若前台運行
mysqladmin -uroot shutdown
# 若配置文件修改
systemctl stop mysqld
# 移除配置文件中的 skip-grant-tables
# 重啟服務
systemctl start mysqld
# 驗證新密碼
mysql -uroot -p'NewStrongPass123!' -e "SELECT VERSION();"
UPDATE mysql.user SET Host='localhost' WHERE User='root';validate_password 插件強制密碼策略| 現象 | 原因 | 解決 |
|---|---|---|
| ERROR 1290 (HY000) | 未執行 FLUSH PRIVILEGES | 修改密碼前必須先 FLUSH PRIVILEGES |
| 密碼不生效 | 權限表緩存 | 執行 FLUSH PRIVILEGES 或重啟服務 |
| 無法啟動 --skip-grant-tables | 權限/目錄問題 | 檢查 datadir 權限、錯誤日志、SELinux |
掌握標準重置流程,配合密碼管理規範,可將密碼遺忘風險降至最低。