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

MySQL 多實例部署全攻略:mysqld_multi 集中管理 vs 多配置文件獨立啟動,生產選型指南

     編輯:MySQL 綜合教學

MySQL 多實例部署全攻略:mysqld_multi 集中管理 vs 多配置文件獨立啟動,生產選型指南

單機跑多個 MySQL 實例是資源隔離、版本共存、測試驗證的常見需求。本文對比「多配置文件+獨立腳本」與「官方 mysqld_multi」兩大模式,提供完整安裝、配置、啟動、管理、開機自啟的生產級實施步驟(基于 MySQL 5.1.50 源碼編譯,SUSE 11 環境,邏輯通用)。

方案一:多配置文件 + 獨立啟動腳本(邏輯簡單、配置靈活)

核心思想

每個實例擁有獨立的 datadir、socket、port、my.cnf、啟動腳本,進程間完全隔離,互不干擾。

實施步驟(3 實例:3306/3307/3308)

  1. 創建用戶與目錄:
    groupadd mysql; useradd -g mysql mysql
    mkdir -p /data/dbdata_3306 /data/dbdata_3307 /data/dbdata_3308
  2. 源碼編譯安裝(公共二進制):
    ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-plugins=partition,innobase,blackhole,myisam,innodb_plugin,heap,archive ...
    make && make install
  3. 初始化各實例數據目錄:
    /usr/local/mysql/bin/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/dbdata_3306 --user=mysql
    # 3307、3308 同理
  4. 編寫三套 my.cnf(關鍵差異:port、socket、datadir、server-id):
    # /data/dbdata_3306/my.cnf
    [mysqld]
    datadir=/data/dbdata_3306/
    port=3306
    socket=/data/dbdata_3306/mysql.sock
    server-id=1
    ... (其他參數通用)
    # 3307/3308 修改 port、socket、datadir、server-id=2/3
  5. 創建獨立啟動腳本 /data/dbdata_3306/mysqld:
    #!/bin/bash
    mysql_port=3306
    mysql_username="admin"
    mysql_password="password"
    function_start_mysql() {
      /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/dbdata_${mysql_port}/my.cnf 2>&1 > /dev/null &
    }
    function_stop_mysql() {
      /usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /data/dbdata_${mysql_port}/mysql.sock shutdown
    }
    case $1 in start) function_start_mysql;; stop) function_stop_mysql;; restart) function_stop_mysql; function_start_mysql;; esac
  6. 啟動、授權、環境變量、開機自啟:
    /data/dbdata_3306/mysqld start
    /usr/local/mysql/bin/mysqladmin -uroot password 'password' -S /data/dbdata_3306/mysql.sock
    # 創建 admin 關閉賬號
    echo 'PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile; source /etc/profile
    echo '/data/dbdata_3306/mysqld start' >> /etc/init.d/boot.local  # SUSE
    # CentOS/RHEL 用 /etc/rc.local

方案二:官方 mysqld_multi 集中管理(運維高效、配置耦合)

核心思想

單一 /etc/my.cnf 內定義 [mysqld1]、[mysqld2]... 區段,統一由 mysqld_multi 進程按組啟停,共享二進制、集中日志。

關鍵配置 /etc/my.cnf

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = admin
password = password

[mysqld1]
port = 3306
socket = /data/dbdata_3306/mysql.sock
pid-file = /data/dbdata_3306/3306.pid
datadir = /data/dbdata_3306
server-id = 1
... (其餘參數同方案一)

[mysqld2]
port = 3307
socket = /data/dbdata_3307/mysql.sock
pid-file = /data/dbdata_3307/3307.pid
datadir = /data/dbdata_3307
server-id = 2
...

[mysqld3]
port = 3308
socket = /data/dbdata_3308/mysql.sock
pid-file = /data/dbdata_3308/3308.pid
datadir = /data/dbdata_3308
server-id = 3
...

操作命令

# 啟動所有
/usr/local/mysql/bin/mysqld_multi start 1-3
# 單獨操作
/usr/local/mysql/bin/mysqld_multi start 2
/usr/local/mysql/bin/mysqld_multi stop 1
/usr/local/mysql/bin/mysqld_multi report  # 查看狀態

兩模式深度對比

維度多配置文件獨立啟動mysqld_multi 集中管理
配置隔離性完全隔離,參數可差異化共享全局參數,實例參數需在區段覆蓋
啟停操作分別執行腳本,可精細控制單命令批量操作,適合批量維護
進程可見性ps 見多個 mysqld_safeps 見一個 mysqld_multi 父進程
日志管理各實例自定義 error log統一由 mysqld_multi 管控
升級遷移單實例滾動升級無影響升級需停全組或修改配置排除
適用場景版本不同、參數差異大、強隔離需求版本一致、參數統一、追求運維效率

生產選型建議

  • 核心業務隔離部署:採用方案一,甚至物理機/容器隔離,杜絕單點故障擴散。
  • 開發/測試/只讀實例共存:採用方案二,統一參數模板,一鍵啟停,配合 mysqlmanager 圖形化管理。
  • 混合模式:核心實例獨立部署,輔助實例用 mysqld_multi 管理。

通用運維檢查清單

  1. ✅ 每實例 server-id 全局唯一(含主從場景)。
  2. ✅ port/socket/datadir/pid-file 四要素不衝突。
  3. ✅ 關鍵參數(innodb_buffer_pool_size 總和 ≤ 物理內存 70%)。
  4. ✅ 防火牆/安全組放行所有實例端口。
  5. ✅ 監控採集:分別抓取各實例 SHOW GLOBAL STATUS、SHOW ENGINE INNODB STATUS。
  6. ✅ 備份策略:各實例獨立備份計劃,避免 IO 爭用。

多實例不等於高可用,合理規劃資源邊界,才能發揮硬件最大價值。

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