首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL root 密碼忘記?5 分鐘重置 root 密碼完整圖文教學

     編輯:MySQL 資料庫相關知識

適用場景

  • MySQL 5.7 / 8.0 (Linux / Windows)
  • 擁有作業系統 root/Administrator 權限
  • 可接受短暫服務中斷 (約 1-2 分鐘)

核心原理

以 --skip-grant-tables 啟動 mysqld,跳過權限驗證 → 免密登入 → 更新 mysql.user 表 authentication_string → 正常重啟。

Linux 環境步驟 (systemd)

步驟 1:停止 MySQL 服務

systemctl stop mysqld
# 或舊版
service mysqld stop

步驟 2:建立臨時目錄供 mysqld 寫入 socket/pid (關鍵!)

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

步驟 3:以 skip-grant-tables 啟動 (背景執行)

mysqld --skip-grant-tables --skip-networking --user=mysql --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock &
# --skip-networking:防止外部連入此不安全實例
# 若啟動失敗,查看 error log:tail -f /var/log/mysqld.log

步驟 4:免密登入並修改密碼

mysql -u root --socket=/var/run/mysqld/mysqld.sock

-- 進入 mysql client 後執行 (MySQL 5.7+ / 8.0)
FLUSH PRIVILEGES; -- skip-grant-tables 下必須先執行
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd!';
-- 或 8.0.4+ 支援
-- SET PASSWORD FOR 'root'@'localhost' = 'NewStrongP@ssw0rd!';
EXIT;

步驟 5:停止臨時實例、正常啟動

# 找到 pid 並殺掉 (或用 mysqladmin shutdown --socket=...)
pkill -f "mysqld.*skip-grant-tables"
systemctl start mysqld

步驟 6:驗證新密碼

mysql -u root -p'NewStrongP@ssw0rd!' -e "SELECT VERSION();"

Windows 環境步驟

  1. 以管理員身分開啟 CMD / PowerShell
  2. 停止服務:net stop mysql80 (服務名視版本而定)
  3. 啟動跳過權限:mysqld --skip-grant-tables --skip-networking (保持視窗開啟)
  4. 新開視窗:mysql -u root (免密進入)
  5. 執行 FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass!';
  6. 關閉步驟 3 視窗 (Ctrl+C),正常啟動服務:net start mysql80

常見坑點與解決

問題原因解決
mysqld 無法啟動 (skip-grant-tables)socket/pid 目錄權限、datadir 路徑錯誤、殘留進程檢查 error log;mkdir /var/run/mysqld;pkill mysqld
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement未先執行 FLUSH PRIVILEGES修改密碼前必須先 FLUSH PRIVILEGES
密碼策略拒絕validate_password 元件強制複雜度暫時降低等級:SET GLOBAL validate_password.policy=LOW; 或用符合策略的密碼
Windows 服務名稱不知版本不同sc query 列出含 MySQL 的服務名

安全建議 (重置後必做)

  1. 執行 mysql_secure_installation
  2. 建立應用專用帳號,撤銷 root 遠端登入
  3. 啟用密碼輪換政策、審計日誌
  4. 備份 mysql 系統庫

MySQL 8.0 新語法速查

-- 修改密碼 (推薦)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';

-- 或 SET PASSWORD (8.0.4+)
SET PASSWORD FOR 'root'@'localhost' = 'newpass';

-- 建立用戶並指定認證插件 (相容舊客戶端)
CREATE USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'apppass';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved