多實例:一台服務器運行多個 MySQL 進程,監聽不同端口 (3306/3307...),共享二進制文件,**獨立配置文件、數據目錄、Socket、PID、日誌**,邏輯隔離如同獨立服務器。
| 優點 | 缺點 |
|---|---|
| 資源利用率高 (閒置 CPU/內存/磁盤複用) | 資源爭搶風險 (某實例慢查詢/高併發影響其它) |
| 節省硬體成本 (適合預算緊張、業務量中小型) | 故障域共享 (OS/硬體故障波及所有實例) |
| 部署運維統一 (同版本、同補丁) | 調優難度大 (共享 innodb_buffer_pool 等全局資源) |
推薦場景:開發/測試環境、中小型業務隔離、讀寫分離從庫合部署。
參考《MySQL 5.5 cmake 源碼編譯安裝》。
mkdir -p /data/{3306,3307}/data
tree -L 2 /data/
# /data/
# ├── 3306
# │ └── data
# └── 3307
# └── data

基於 support-files/my-medium.cnf 修改關鍵參數 (以 3306 為例):
[client] port = 3306 socket = /data/3306/mysql.sock [mysqld] port = 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data server-id = 1 log-bin = mysql-bin binlog_format = mixed max_binlog_size = 500M skip-name-resolve # ... 其餘緩衝區參數保持默認或按資源分配調整 [mysqld_safe] log-error = /data/3306/ilanni.err pid-file = /data/3306/ilanni.pid

3307 配置:複製 3306 文件,sed -i 's/3306/3307/g' /data/3307/my.cnf 批量替換端口、路徑、server-id。

/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/data/3306/data \
--user=mysql
/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/data/3307/data \
--user=mysql
關鍵: --user=mysql 確保生成文件屬主為 mysql,啟動時無權限報錯。


chown -R mysql:mysql /data/3306 chown -R mysql:mysql /data/3307
漏此步驟會導致啟動報錯 Permission denied。

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf & /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf & ps aux | grep mysqld # 應見兩個 mysqld 進程,分別指向對應 datadir

# 本地登錄 3306 mysql -uroot -p -S /data/3306/mysql.sock # 遠程登錄 3306 mysql -h192.168.1.213 -uroot -p -S /data/3306/mysql.sock


mysqladmin -uroot -p password '123456' -S /data/3306/mysql.sock

mysqladmin -uroot -p -S /data/3306/mysql.sock shutdownmysqld_safe --defaults-file=...。innodb_buffer_pool_size、innodb_log_file_size,總和 ≤ 物理內存 70%。