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

MySQL mysqld_multi 單機多實例部署全流程:從環境準備到生產驗證

     編輯:MySQL 綜合教學

MySQL mysqld_multi 單機多實例部署全流程:從環境準備到生產驗證

利用多核 CPU 優勢,單機部署多個 MySQL 實例(不同端口、數據目錄、配置),通過 mysqld_multi 統一管理。本文覆蓋源碼編譯安裝、目錄規劃、配置文件、初始化、啟動驗證、運維腳本。

一、為什麼要多實例?

  • MySQL 單進程多線程,無法充分利用多核 CPU(5.6+ 改進但仍有上限)
  • 業務隔離:核心交易/報表/測試 互不影響
  • 資源配額:分實例限制內存、連接數、IOPS
  • 版本共存:不同業務需不同 MySQL 版本

二、環境準備(源碼編譯安裝)

# 1. 依賴包
yum install -y cmake gcc gcc-c++ ncurses-devel libaio-devel bison make

# 2. 創建用戶
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

# 3. 編譯安裝
tar -xvf mysql-5.6.12.tar.gz
cd mysql-5.6.12
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/home/data/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

make -j$(nproc)
make install

三、實例 3307 目錄規劃

# 程序目錄 (共享二進制)
# /usr/local/mysql (已安裝)

# 實例專用目錄
mkdir -p /usr/local/mysql3307
chown -R mysql:mysql /usr/local/mysql3307

# 數據目錄
mkdir -p /home/data/mysql3307/data
chown -R mysql:mysql /home/data/mysql3307

# Binlog 目錄
mkdir -p /home/data/mysql3307/binlog
chown -R mysql:mysql /home/data/mysql3307/binlog

# Relay log 目錄
mkdir -p /home/data/mysql3307/relay_log
chown -R mysql:mysql /home/data/mysql3307/relay_log

四、mysqld_multi 配置文件

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /home/mysql/mydata/log/mysqld_multi.log

[mysqld1]  # 實例標識,對應 mysqld_multi start 1
socket = /usr/local/mysql3307/mysql.sock
port = 3307
pid-file = /usr/local/mysql3307/mysqld.pid
datadir = /home/data/mysql3307/data

log_bin = /home/data/mysql3307/binlog/mysql-bin
server-id = 1230
relay_log = /home/data/mysql3307/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0

innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0
# 其他優化參數...
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

五、初始化實例數據目錄

# 使用安裝目錄的腳本 (MySQL 5.6/5.7)
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/home/data/mysql3307/data \
--defaults-file=/etc/my3307.cnf

# MySQL 8.0+
/usr/local/mysql/bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/home/data/mysql3307/data \
--defaults-file=/etc/my3307.cnf

六、啟動與管理

# 啟動所有實例
mysqld_multi start

# 啟動指定實例
mysqld_multi start 1

# 停止所有
mysqld_multi stop

# 停止指定
mysqld_multi stop 1

# 查看狀態
mysqld_multi report

# 連線測試
mysql -u root -p -S /usr/local/mysql3307/mysql.sock -P 3307

七、新增實例 3308 (擴展範例)

# 1. 目錄
mkdir -p /usr/local/mysql3308 /home/data/mysql3308/{data,binlog,relay_log}
chown -R mysql:mysql /usr/local/mysql3308 /home/data/mysql3308

# 2. 配置追加 [mysqld2]
[mysqld2]
socket = /usr/local/mysql3308/mysql.sock
port = 3308
pid-file = /usr/local/mysql3308/mysqld.pid
datadir = /home/data/mysql3308/data
log_bin = /home/data/mysql3308/binlog/mysql-bin
server-id = 1231
relay_log = /home/data/mysql3308/relay_log/mysql-relay-bin
server-id = 1231
innodb_buffer_pool_size = 256M

# 3. 初始化
mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/data/mysql3308/data

# 4. 啟動
mysqld_multi start 2

八、生產運維腳本

<?bash
# /usr/local/bin/mysql_multi_manager.sh
ACTION=$1  # start|stop|restart|status
INSTANCE=${2:-all}

case $ACTION in
  start)
    if [ "$INSTANCE" = "all" ]; then
      mysqld_multi start
    else
      mysqld_multi start $INSTANCE
    fi
    ;;
  stop)
    if [ "$INSTANCE" = "all" ]; then
      mysqld_multi stop
    else
      mysqld_multi stop $INSTANCE
    fi
    ;;
  status)
    mysqld_multi report
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status} [instance_num|all]"
    exit 1
    ;;
esac

九、監控與告警

  • 每實例獨立 mysqld_exporter (Prometheus) 抓取指標,標籤區分 instance="3307"
  • 關鍵指標:Threads_connected/Max_used_connections、Innodb_buffer_pool_pages_free、Queries_per_sec、Slow_queries
  • 日誌輪轉:logrotate 配置各實例 error.log/slow.log
  • 備份策略:xtrabackup --socket=/usr/local/mysql3307/mysql.sock 實例級備份

十、避坑清單

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
坑點後果規避
共享 basedir 但配置衝突啟動失敗/行為異常每實例獨立 defaults-file,核心參數隔離
server-id 重複複製中斷/數據不一致規劃 server-id 池:3307→1230, 3308→1231...
端口衝突啟動失敗/etc/services 註冊,防火牆放行
內存總和超物理內存OOM Killer 殺進程Σ innodb_buffer_pool_size < 物理內存 70%
文件描述符不足Too many open filesulimit -n 65535、open_files_limit=65535