案例背景
- 環境:XAMPP 1.6.7 (Windows)
- 症狀:客戶遺忘 root 密碼,
mysqld_safe 無法啟動,官方重置流程失效。
- 發現:XAMPP 預設安裝 root 密碼為空字串(無密碼)。
嘗試過程與坑點
- 重裝 XAMPP:需重新部署應用與還原資料,成本高。
- 替換
var/mysql 目錄:密碼變空可登入,但修改密碼報 user table is read only。
- 關鍵突破: 執行
mysqladmin -u root flush-tables 釋放鎖定,並確保 var/mysql 目錄寫入權限,即可正常 SET PASSWORD。
標準重置步驟(適用 XAMPP / Windows)
# 1. 停止 MySQL 服務 (XAMPP Control Panel)
# 2. 命令列以管理員身分執行
cd \xampp\mysql\bin
mysqld --skip-grant-tables --skip-networking
# 3. 新開視窗,無密碼登入
mysql -u root
# 4. 更新密碼 (MySQL 5.7+ 使用 authentication_string)
UPDATE mysql.user SET authentication_string=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
EXIT;
# 5. 關閉跳過權限的 mysqld,正常啟動服務
# 6. 驗證新密碼
mysql -u root -p
後續處理
- 若原有其他帳號,需重建並授權。
- 建議將
config.inc.php (phpMyAdmin) 同步更新密碼。
- 生產環境務必修改預設空密碼,並限制
root@localhost 僅本地登入。
教訓總結
- XAMPP 預設無密碼,初次安裝即應設定強密碼。
user table is read only 通常因 FLUSH TABLES 未執行或目錄權限不足。
- Windows 下
mysqld_safe 不存在,直接用 mysqld --skip-grant-tables。