MySQL 密碼管理場景多樣:知舊密碼改密、忘記密碼重置、跨機遷移 user 表、甚至十六進位編輯 .MYD 檔。本文系統整理 6 類主流方法,附 Windows/Linux 雙平台指令,並針對權限、檔案屬主、存儲引擎差異給出避坑指南。
登入 phpMyAdmin → 選 mysql 資料庫 → user 表 → 編輯 root 列 → Password 欄位選 PASSWORD 函數 → 輸入新密碼 → 執行。務必勾選 PASSWORD() 函數,否則存明文無法登入。
mysqladmin -u root -p password '新密碼'
# 輸入舊密碼後生效
# 修改非 root 用戶:將 root 替換為目標用戶名
限制:需網路連線正常、無法將密碼設為空字串。
INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
FLUSH PRIVILEGES;
本質是新增用戶,適用於建立應用專用帳號。
REPLACE INTO mysql.user (Host, User, Password) VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
FLUSH PRIVILEGES;
若用戶存在則更新,否則插入,比 INSERT 更彈性。
SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
-- 無需 FLUSH PRIVILEGES,即時生效
GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
-- 無需 PASSWORD(),無需 FLUSH,支援權限與密碼同步設定
net stop mysql
cd C:\mysql\bin
mysqld-nt --skip-grant-tables
# 另開視窗
mysqladmin -u root flush-privileges password "新密碼"
mysqladmin -u root -p shutdown
net start mysql
killall -TERM mysqld
mysqld_safe --skip-grant-tables &
mysqladmin -u root flush-privileges password "新密碼"
killall -TERM mysqld
systemctl start mysqld
適用於跨機房、跨 OS 遷移密碼:
data/mysql/user.frm、user.MYD、user.MYI 三個檔案chown -R mysql:mysql /var/lib/mysql/mysql/user.*
chmod 600 /var/lib/mysql/mysql/user.*
UPDATE user SET Password=PASSWORD('xxx') WHERE User='root'; FLUSH PRIVILEGES;避坑:若來源為 Windows 預設配置,目標 Linux 需額外清理匿名帳號:
DELETE FROM user WHERE User='';
DELETE FROM user WHERE Host='%';
FLUSH PRIVILEGES;
關閉 MySQL → 用 UltraEdit 開啟 user.MYD → 找到 root 後 8 位元組 → 改為 565491d704013245(對應密碼 123456) → 存檔啟動。風險極高,僅供學習參考。
SET PASSWORD 或 GRANT--skip-grant-tables 標準流程