Windows 上 MySQL 卸載殘留是導致重裝失敗、服務衝突的主因。本文提供標準化 5 步驟徹底清理流程。
# 以管理員身分執行 CMD/PowerShell
net stop mysql
sc delete mysql
# 成功顯示: [SC] DeleteService SUCCESS
# 若有多實例
sc query type= service state= all | findstr mysql
sc delete MySQL57
sc delete MySQL80
「控制台」→「程式和功能」→ 選擇 "MySQL Server X.Y" → 解除安裝
勾選「移除資料檔案」若提示 (視安裝版本而定)
# 典型路徑
rd /s /q "C:\Program Files\MySQL\MySQL Server 5.7"
rd /s /q "C:\Program Files\MySQL\MySQL Server 8.0"
# 若有自訂路徑同理刪除
# Windows 7/10/11 (ProgramData 預設隱藏)
rd /s /q "C:\ProgramData\MySQL"
# 啟用顯示隱藏檔案:
# 檔案總管 → 檢視 → 勾選「隱藏的項目」
開啟 `regedit`,依序刪除 (若存在):
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL
HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB (64位系統)
HKEY_CURRENT_USER\Software\MySQL AB
| 安裝錯誤 | 殘留原因 | 補救清理 |
|---|---|---|
| cannot create windows service for mysql error: 0 | 舊服務未刪/註冊表 Services 殘留 | sc delete + 刪除 HKLM\SYSTEM\*ControlSet*\Services\MySQL |
| 配置步驟第 3 步失敗 | 資料目錄殘留/權限衝突 | 刪除 ProgramData\MySQL 完整目錄 |
| 密碼設定頁報錯 | 舊 root 帳號資訊在註冊表/授權表 | 清理 HKLM\SOFTWARE\MySQL AB |
| 啟動服務失敗 1067 | my.ini 配置錯誤/資料目錄損壞 | 完整清理後重裝,勿保留舊配置 |
# 需管理員權限執行
Stop-Service -Name mysql* -Force -ErrorAction SilentlyContinue
Get-Service -Name mysql* | ForEach-Object { sc.exe delete $_.Name }
Remove-Item "C:\Program Files\MySQL" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "C:\ProgramData\MySQL" -Recurse -Force -ErrorAction SilentlyContinue
$regPaths = @(
"HKLM:\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL",
"HKLM:\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL",
"HKLM:\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL",
"HKLM:\SYSTEM\ControlSet001\Services\MySQL",
"HKLM:\SYSTEM\ControlSet002\Services\MySQL",
"HKLM:\SYSTEM\CurrentControlSet\Services\MySQL",
"HKLM:\SOFTWARE\MySQL AB",
"HKLM:\SOFTWARE\Wow6432Node\MySQL AB",
"HKCU:\Software\MySQL AB"
)
$regPaths | ForEach-Object { Remove-Item $_ -Recurse -Force -ErrorAction SilentlyContinue }
Write-Host "MySQL 清理完成,建議重啟電腦。"