提供兩種互補的恢復路徑:適用於可停機、有原始碼包的「資料目錄替換法」,與適用於線上服務不可長時間停機的「官方 --skip-grant-tables 法」。
mysql 系統庫可能損壞/竄改data/mysql 通用)mv data/mysql data/oldmysqldata/mysql 至 data/SET PASSWORD...oldmysql 確認原授權狀態,必要時逐表遷移| 優點 | 缺點 |
|---|---|
| 徹底重置系統庫,乾淨無殘留 | 原系統庫授權/使用者/權限全部遺失,需重建 |
| 無需修改啟動參數 | 需停機、需原始碼包 |
kill \`cat /mysql-data-dir/hostname.pid\` 或 killall -TERM mysqldmysqld_safe --skip-grant-tables & 或 /bin/safe_mysqld --skip-grant-tables &mysqladmin -h hostname -u root password 'newpass'USE mysql; UPDATE user SET Password = PASSWORD('yourpass') WHERE User = 'root'; FLUSH PRIVILEGES;mysqladmin -h hostname flush-privileges 或 FLUSH PRIVILEGES;| 操作 | 指令 |
|---|---|
| 停止 | killall -TERM mysqld |
| 跳過授權啟動 | mysqld_safe --skip-grant-tables & |
| mysqladmin 修改密碼 | mysqladmin -u root flush-privileges password "newpassword" |
| SQL 修改密碼 | UPDATE user SET Password = PASSWORD('new_pass') WHERE User = 'root'; FLUSH PRIVILEGES; |
| 載入權限 | mysqladmin flush-privileges / FLUSH PRIVILEGES; |
是否可接受 5-10 分鐘停機?
├─ 是 → 有原始碼包/乾淨實例? → 是 → 方案一(最乾淨)
│ └─ 否 → 方案二
└─ 否(線上核心業務) → 方案二(不停主服務,僅短暫重啟 mysqld)
SELECT User, Host, Password FROM mysql.user; 確認雜湊已更新FLUSH PRIVILEGES; 確保生效兩大方案互補,依業務可用性要求選擇,平時多演練,臨危不亂。