Windows 服務管理器 (SCM) 區分服務名稱,同一可執行檔可註冊多個不同名稱的服務,各自指向不同 my.ini 與資料目錄。
D:\MySQL,Port 3306)。D:\MySQL2,Port 3307)。mysqld --install <服務名> --defaults-file=<路徑> 手動註冊第一個實例服務。ImagePath 注入 --defaults-file 參數。# 安裝至 D:\MySQL,Port 3306
# 測試正常後
xcopy D:\MySQL D:\MySQL_backup /E /I /H
# 控制台解除安裝 MySQL
# 安裝第二實例至 D:\MySQL2,修改 my.ini:
[mysqld]
port=3307
datadir=D:/MySQL2/data
socket=MySQL2
cmd 管理員模式
cd D:\MySQL\bin
mysqld --install MySQL1 --defaults-file="D:\MySQL\my.ini"
regedit
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL1
ImagePath 原值: "D:\MySQL\bin\mysqld.exe" MySQL1
修改為: "D:\MySQL\bin\mysqld.exe" --defaults-file="D:\MySQL\my.ini" MySQL1
注意: --defaults-file 必須在服務名稱 之前,且路徑含空格需雙引號。
net start MySQL1
net start MySQL2 # 第二實例安裝時已自動註冊
# 連線測試
mysql -u root -P 3306 -h 127.0.0.1
mysql -u root -P 3307 -h 127.0.0.1
| 錯誤 | 原因 | 解決 |
|---|---|---|
| 1067 進程意外終止 | datadir 路徑錯誤 / 權限不足 / 殘留 log 檔 | 刪除 data 下 *.log、檢查 my.ini 路徑、授權目錄權限 | 服務名稱衝突 | 重複安裝未清理 | sc delete MySQL1 移除殘留服務 |
| 無法連線 | 防火牆阻擋 Port / bind-address 限制 | 開放 3306/3307、設定 bind-address=0.0.0.0 |
docker run -d -p 3306:3306 --name mysql1 -v /data/mysql1:/var/lib/mysql mysql:8.0 秒級啟動多實例,隔離徹底。[mysqld1] [mysqld2]。手動註冊服務法雖繁瑣,但能深入理解 Windows 服務機制與 MySQL 配置載入順序,是 DBA 必修內功。