每個實例擁有獨立的 basedir、datadir、port、socket、my.ini、Windows 服務名,進程隔離、配置隔離、數據隔離。
D:\MySQL\
├── 5.7.44\ # 實例 1 程式碼(或解壓包)
│ ├── bin\
│ ├── data\ # 實例 1 數據
│ └── my.ini # 實例 1 配置
└── 8.0.36\ # 實例 2 程式碼(可不同版本)
├── bin\
├── data\ # 實例 2 數據
└── my.ini # 實例 2 配置
# 實例 1: D:\MySQL\5.7.44\my.ini
[mysqld]
basedir=D:/MySQL/5.7.44
datadir=D:/MySQL/5.7.44/data
port=3306
socket=mysql57.sock
server-id=1
log-error=D:/MySQL/5.7.44/data/error.log
character-set-server=utf8mb4
[client]
port=3306
socket=mysql57.sock
# 實例 2: D:\MySQL\8.0.36\my.ini
[mysqld]
basedir=D:/MySQL/8.0.36
datadir=D:/MySQL/8.0.36/data
port=3307
socket=mysql80.sock
server-id=2
log-error=D:/MySQL/8.0.36/data/error.log
character-set-server=utf8mb4
[client]
port=3307
socket=mysql80.sock
# 以管理員身份 CMD
cd /d D:\MySQL\5.7.44\bin
mysqld --initialize-insecure --basedir=D:/MySQL/5.7.44 --datadir=D:/MySQL/5.7.44/data
cd /d D:\MySQL\8.0.36\bin
mysqld --initialize-insecure --basedir=D:/MySQL/8.0.36 --datadir=D:/MySQL/8.0.36/data
# 實例 1
cd /d D:\MySQL\5.7.44\bin
mysqld --install MySQL57 --defaults-file="D:\MySQL\5.7.44\my.ini"
# 實例 2
cd /d D:\MySQL\8.0.36\bin
mysqld --install MySQL80 --defaults-file="D:\MySQL\8.0.36\my.ini"
net start MySQL57
net start MySQL80
# 連線測試
mysql -u root -P 3306 --protocol=tcp -e "SELECT VERSION(), @@PORT;"
mysql -u root -P 3307 --protocol=tcp -e "SELECT VERSION(), @@PORT;"
--install MySQL57 / MySQL80,不可重複socket 參數仍需區分,防客戶端連線混淆HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL57\ImagePath 應包含 --defaults-file=...basedir/datadir 路徑錯或 my.ini 讀取失敗,查看事件查看器 → Application → MySQL 來源mysqldump -P 3306 / -P 3307 互不干擾innodb_buffer_pool_size 按實例記憶體分配Windows 多實例關鍵在於**目錄隔離、配置隔離、服務隔離**。按上述標準化流程部署,避免「複製目錄+修改註冊表」的舊式黑盒操作,實現可維護、可監控、可擴展的多實例架構。