首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

同一台機器運行多個 MySQL 實例:多埠、多 Socket、多資料目錄配置指南

     編輯:MySQL 綜合教學

前言

測試新版本、支援多租戶、模擬主從環境等場景常需在單機運行多個 MySQL 實例。核心原則:每個實例獨佔 TCP 埠、Unix Socket、資料目錄、設定檔、啟動腳本。

方法一:編譯時指定不同預設值(永久隔離)

./configure \
    --with-tcp-port=3307 \
    --with-unix-socket=/tmp/mysql3307.sock \
    --prefix=/usr/local/mysql-3307
  • --with-tcp-port:指定預設監聽埠。
  • --with-unix-socket:指定預設 Socket 檔案路徑。
  • --prefix:安裝根目錄隔離,避免二進位檔、支援檔案衝突。

驗證現有實例埠與 Socket:

mysqladmin -h hostname --port=3306 variables | grep -E 'port|socket'

方法二:運行時參數覆蓋(輕量、無需重編譯)

/path/to/mysqld_safe \
    --socket=/tmp/mysql3307.sock \
    --port=3307 \
    --datadir=/data/mysql3307 \
    --log-error=/var/log/mysql3307/error.log \
    --pid-file=/var/run/mysql3307.pid \
    --defaults-file=/etc/mysql/3307/my.cnf
  • --datadir:獨立資料目錄(嚴禁多實例共用同一 datadir,除非採用共享儲存叢集方案)。
  • --log-error、--pid-file:避免日誌與 PID 檔衝突。
  • --defaults-file:指定專屬設定檔,集中管理所有參數。

客戶端連線指定埠與 Socket

方式範例
命令列指定埠mysql -h 127.0.0.1 --port=3307 -u root -p
命令列指定 Socketmysql --socket=/tmp/mysql3307.sock -u root -p
C API / Connector連線參數傳遞 port、unix_socket
環境變數export MYSQL_TCP_PORT=3307; export MYSQL_UNIX_PORT=/tmp/mysql3307.sock
選項檔 ~/.my.cnf[client]\nport=3307\nsocket=/tmp/mysql3307.sock

系統級服務化管理

  • 編輯 /etc/init.d/mysql 或建立 systemd 單元 mysql@3307.service,支援 systemctl start mysql@3307。
  • 每個實例對應獨立單元檔,設定 EnvironmentFile=/etc/mysql/3307/my.cnf、ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/3307/my.cnf。

關鍵警示

嚴禁兩個實例對同一資料目錄寫入資料! 若作業系統檔案鎖定機制失效(NFS、某些虛擬化環境),將導致資料損毀、索引不一致、甚至磁碟層面損壞。多實例必須嚴格隔離 datadir。

結語

單機多實例的核心在於「四獨立」:獨立埠、獨立 Socket、獨立資料目錄、獨立設定檔。推薦使用 mysqld_safe 運行時參數覆蓋法,配合 systemd 模板化部署,實現輕量、可維運的多實例管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved