在一台伺服器運行多個 MySQL 實例(如 5.5.32 與 5.6.31 並存),關鍵在於目錄隔離、埠號區分、Socket 獨立、資料目錄分離。本文以 CentOS 6.8 原始碼編譯安裝為例,提供完整可複製執行的步驟。
| 用途 | 實例 1 (5.5.32) | 實例 2 (5.6.31) |
|---|---|---|
| 軟體安裝目錄 | /mysqlsoft/mysql1 | /mysqlsoft/mysql2 |
| 資料目錄 | /data/mysql1 | /data/mysql2 |
| Socket 檔案 | /mysqlsoft/mysql1/mysql.sock | /mysqlsoft/mysql2/mysql.sock |
| TCP 埠號 | 3301 | 3302 |
groupadd mysql useradd mysql -g mysql mkdir -p /mysqlsoft/mysql1 /mysqlsoft/mysql2 mkdir -p /data/mysql1 /data/mysql2 chown -R mysql:mysql /mysqlsoft/mysql1 /mysqlsoft/mysql2 chown -R mysql:mysql /data/mysql1 /data/mysql2
yum install -y cmake make gcc perl
cd /mysqlsoft/mysql1 tar -zxvf mysql-5.5.32.tar.gz mkdir bootstrap && cd bootstrap cmake .. \ -DCMAKE_INSTALL_PREFIX=/mysqlsoft/mysql1 \ -DMYSQL_DATADIR=/data/mysql1 \ -DSYSCONFDIR=/mysqlsoft/mysql1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_TCP_PORT=3301 \ -DMYSQL_UNIX_ADDR=/mysqlsoft/mysql1/mysql.sock make && make install
cd /mysqlsoft/mysql1 cp support-files/my-default.cnf my.cnf # 編輯 my.cnf 加入 [mysqld] 區段:basedir、datadir、port、socket、character-set-server=utf8 等 chown -R mysql:mysql . scripts/mysql_install_db --user=mysql
cd /mysqlsoft/mysql2 tar -zxvf mysql-5.6.31.tar.gz mkdir bootstrap && cd bootstrap cmake .. \ -DCMAKE_INSTALL_PREFIX=/mysqlsoft/mysql2 \ -DMYSQL_DATADIR=/data/mysql2 \ -DSYSCONFDIR=/mysqlsoft/mysql2 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_TCP_PORT=3302 \ -DMYSQL_UNIX_ADDR=/mysqlsoft/mysql2/mysql.sock make && make install
cd /mysqlsoft/mysql2 cp support-files/my-default.cnf my.cnf # 編輯 my.cnf 同樣設定 basedir、datadir、port=3302、socket 等 chown -R mysql:mysql . scripts/mysql_install_db --user=mysql
# 實例 1 cd /mysqlsoft/mysql1 bin/mysqld_safe --user=mysql & # 實例 2 cd /mysqlsoft/mysql2 bin/mysqld_safe --user=mysql &
ps -ef | grep mysql # 應看到兩組 mysqld 進程,分別指向不同 basedir、datadir、port、socket # 每個實例分別執行安全腳本 /mysqlsoft/mysql1/bin/mysql_secure_installation /mysqlsoft/mysql2/bin/mysql_secure_installation # 內容:設定 root 密碼、移除匿名使用者、禁止 root 遠端登入、移除 test 資料庫
生產建議:
• 使用 systemd 或 mysqld_multi 管理多實例服務。
• 不同實例配置獨立的 my.cnf,避免參數衝突。
• 監控腳本需指定對應的 socket 或 port 連線檢查。