Windows 環境下 MySQL 預設資料目錄隱藏於 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\Data\(XP/Server 2003)或 C:\ProgramData\MySQL\MySQL Server 5.1\Data\(Vista/7/8/10/Server 2008+),且 Application Data/ProgramData 為隱藏資料夾。遷移至自訂路徑(如 D:\MySQL\Data)便於管理、備份與磁碟規劃。本文提供標準化遷移步驟與關鍵避坑點。
mysqld --versionmy.ini 位置:mysqld --help --verbose 2>&1 | findstr /i "my.ini" 或常見路徑:安裝目錄、C:\ProgramData\MySQL\MySQL Server 5.1\my.inimy.ini 與資料目錄D:\MySQL\Data(確保磁碟空間充足、NTFS 格式、無中文路徑)net stop mysql
或服務管理器 (services.msc) 停止 MySQL51 服務move "C:\ProgramData\MySQL\MySQL Server 5.1\Data" "D:\MySQL\Data"Data 資料夾本身,而非其內容。目標路徑應為 D:\MySQL\Data 且包含 ibdata1、mysql 資料夾等C:\ProgramData\MySQL\MySQL Server 5.1\(可選,避免混淆)my.ini 配置
[mysqld]
# 修改 datadir 指向新路徑(雙反斜線或單正斜線均可)
datadir="D:\\MySQL\\Data"
# 或
datadir="D:/MySQL/Data"
# 確保 socket、log-error、pid-file 等路徑亦同步更新(如有指定)
socket="D:/MySQL/Data/mysql.sock"
log-error="D:/MySQL/Data/mysqld.log"
pid-file="D:/MySQL/Data/mysqld.pid"
net start mysql
或服務管理器啟動mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
# 應輸出 D:\MySQL\Data\
mysql -u root -p -e "SHOW DATABASES;"
# 應正常列出所有資料庫
| 問題 | 原因 | 解決方案 |
|---|---|---|
| 服務啟動失敗、事件檢視器報 1067 錯誤 | datadir 路徑錯誤、權限不足、my.ini 未生效 | 以管理員身分執行 mysqld --console 觀察錯誤輸出、檢查路徑拼寫、確認 NTFS 權限 |
| 啟動成功但資料庫為空/報 Table doesn't exist | 移動的是 Data 內容而非 Data 資料夾本身、路徑層級錯誤 | 確認 D:\MySQL\Data\mysql、ibdata1 存在、my.ini 指向 D:\MySQL\Data |
| InnoDB 錯誤:tablespace id mismatch | 舊 ib_logfile 殘留、跨版本遷移 | 停止服務、刪除 ib_logfile0、ib_logfile1 重啟(InnoDB 會重建) |
| 連線報 Can't connect to MySQL server on 'localhost' | socket 路徑不一致、named pipe 衝突 | 客戶端指定 --protocol=tcp --port=3306、或更新客戶端 my.ini socket 路徑 |
| 權限錯誤 Access denied | 移動後系統帳號權限遺失 | 以管理員身分執行:icacls "D:\MySQL\Data" /grant "NETWORK SERVICE:(OI)(CI)F" /T |
[mysqld]
# 實例 1 (port 3306)
datadir="D:/MySQL/Instance1/Data"
port=3306
socket="D:/MySQL/Instance1/Data/mysql.sock"
log-error="D:/MySQL/Instance1/Data/mysqld.log"
pid-file="D:/MySQL/Instance1/Data/mysqld.pid"
[mysqld]
# 實例 2 (port 3307)
datadir="D:/MySQL/Instance2/Data"
port=3307
socket="D:/MySQL/Instance2/Data/mysql.sock"
log-error="D:/MySQL/Instance2/Data/mysqld.log"
pid-file="D:/MySQL/Instance2/Data/mysqld.pid"
C:\ProgramData\MySQL\MySQL Server 8.0\Data\my.ini 位置相同,但支援 !includedir 模組化配置caching_sha2_password,舊客戶端可能需調整Windows 下 MySQL 資料目錄遷移核心在於:完整移動 Data 資料夾、精確修改 my.ini datadir、確保 NTFS 權限正確、清理舊 Redo Log。遵循標準流程,配合啟動前 mysqld --console 除錯,可確保零停機風險(僅停機維護窗口)平滑遷移。