MySQL 預設 `datadir` 位於 `C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.x\data`(或 `C:\ProgramData\MySQL\...`),C 槽空間緊張時需遷移至其他磁碟。網上教程眾多,但直接修改 `my.ini` 重啟服務常報錯「本地計算機無法啟動 MySQL 服務」。本文記錄親測可行的完整步驟與避坑要點。
mysql -u root -p
mysql> SHOW VARIABLES LIKE 'datadir';
net stop mysql
# 或:服務管理器 (services.msc) 停止 MySQL 服務
將原 `datadir` 下**所有檔案/資料夾**完整複製至目標路徑(如 `E:\MySQL\data`)。不要刪除原目錄,直到驗證新位置正常運作。
xcopy "C:\ProgramData\MySQL\MySQL Server 5.5\data" "E:\MySQL\data" /E /I /H /K
找到安裝目錄下的 `my.ini`(而非 `C:\Windows\my.ini`),修改 `datadir`:
[mysqld]
# 原:datadir="C:/ProgramData/MySQL/MySQL Server 5.5/data/"
datadir="E:\\MySQL\\data" # 必須使用雙反斜線 \\ 或單正斜線 /,切勿用單反斜線 \
關鍵避坑:Windows 下 `my.ini` 內路徑**必須用 `\\` 或 `/`**,單 `\` 會被當作跳脫字元導致路徑解析錯誤,服務啟動失敗。
net start mysql
mysql -u root -p
mysql> SHOW VARIABLES LIKE 'datadir'; # 確認輸出為新路徑
確認新位置穩定運行 1~2 天無問題後,可刪除原 `data` 目錄釋放 C 槽空間。
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 服務啟動失敗、無報錯日誌 | `datadir` 路徑寫法錯誤(單反斜線)、權限不足 | 檢查 `my.ini` 路徑格式;確保 `mysql` 服務帳號對新目錄有讀寫權限 |
| 啟動後隨即停止 | `innodb_log_file_size` 變更但舊日誌檔未刪除 | 刪除新 `datadir` 下的 `ib_logfile*` 重啟 |
| mysqld.exe 崩潰 | 配置檔語法錯誤、編碼問題(BOM) | 用 Notepad++ 另存為 UTF-8 無 BOM;逐段還原配置排查 |
| Instance Configuration Wizard 卡死 | 殘留服務/註冊表 | 以管理員身分執行 `mysqld --remove` 移除服務,清理註冊表 `HKLM\SYSTEM\CurrentControlSet\Services\MySQL`,重新安裝 |
遵循上述步驟,Windows 下 MySQL `datadir` 遷移成功率極高,避免反覆卸載重裝的痛苦。