首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 多實例 MySQL 源碼編譯安裝指南:單機部署多版本/多端口完整流程

     編輯:MySQL 資料庫相關知識

生產環境常需在單台伺服器運行多個 MySQL 實例(不同版本、不同業務隔離、不同端口)。本文記錄 MySQL 5.1.49 於 Fedora 12 以源碼編譯方式安裝多實例的完整流程,涵蓋編譯參數、目錄規劃、配置檔隔離、啟動腳本、系統服務註冊等關鍵步驟,並針對常見坑點(innodb 引擎缺失、my.cnf 讀取失敗、socket 衝突)給出解決方案。

環境準備

  • OS:Fedora 12(同樣適用 CentOS/RHEL 6/7、Ubuntu)
  • 源碼包:mysql-5.1.49.tar.gz
  • 目標:安裝兩個實例,分別監聽 3306、3310 端口,資料目錄隔離

實例 1:安裝至 /test/mysql(端口 3306)

1. 解壓與編譯配置


tar -zxvf mysql-5.1.49.tar.gz
cd mysql-5.1.49
./configure --prefix=/test/mysql \
            --with-charset=gbk \
            --with-plugins=innobase \
            --with-extra-charsets=all

關鍵參數:

  • --with-plugins=innobase:5.1+ 版本必須顯式指定,否則缺少 InnoDB 會導致 mysql_install_db 報錯
  • --with-charset=gbk:預設字符集,生產建議 utf8mb4

2. 編譯安裝


make && make install
# 若重新編譯:make clean && make && make install

3. 建立用戶與目錄結構


groupadd mysql
useradd -g mysql -s /sbin/nologin mysql

cd /test/mysql
mkdir -p var/data var/log var/run var/tmp
cp share/mysql/my-medium.cnf my.cnf
chown -R mysql:mysql var
chown -R root:mysql .
chmod 750 var

4. 配置 my.cnf(核心隔離點)


[client]
port = 3306
socket = /test/mysql/var/run/mysql3306.sock
default-character-set = utf8mb4

[mysqld]
port = 3306
socket = /test/mysql/var/run/mysql3306.sock
basedir = /test/mysql
datadir = /test/mysql/var/data
pid-file = /test/mysql/var/run/mysqld.pid
log-error = /test/mysql/var/log/error.log
slow_query_log_file = /test/mysql/var/log/slow.log

# InnoDB 專用路徑
innodb_data_home_dir = /test/mysql/var/data
innodb_data_file_path = ibdata1:100M:autoextend
innodb_log_group_home_dir = /test/mysql/var/data
innodb_log_file_size = 64M
innodb_buffer_pool_size = 128M

# 基礎優化
key_buffer_size = 32M
sort_buffer_size = 256K
read_buffer_size = 256K
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 16M
max_connections = 200

5. 初始化資料庫


/test/mysql/bin/mysql_install_db --defaults-file=/test/mysql/my.cnf --user=mysql

必須指定 --defaults-file,否則會讀取 /etc/my.cnf 導致初始化到錯誤目錄。

6. 權限修正與啟動


chown -R root:mysql /test/mysql
chown -R mysql:mysql /test/mysql/var

/test/mysql/bin/mysqld_safe --defaults-file=/test/mysql/my.cnf --user=mysql &

7. 連線驗證


/test/mysql/bin/mysql -u root -S /test/mysql/var/run/mysql3306.sock --defaults-file=/test/mysql/my.cnf

8. 註冊系統服務


cp /test/mysql/share/mysql/mysql.server /etc/init.d/mysql3306
chmod 755 /etc/init.d/mysql3306
# 修改腳本內 basedir、datadir、pid_file 指向實例路徑
chkconfig --add mysql3306
chkconfig mysql3306 on
service mysql3306 start

實例 2:安裝第二實例(端口 3310)

同源碼目錄重新配置不同 --prefix,或直接複製實例 1 目錄並修改配置:


# 複製目錄
cp -r /test/mysql /test/mysql3310
chown -R mysql:mysql /test/mysql3310

# 修改 my.cnf 關鍵差異
[client]
port = 3310
socket = /test/mysql3310/var/run/mysql3310.sock

[mysqld]
port = 3310
socket = /test/mysql3310/var/run/mysql3310.sock
basedir = /test/mysql3310
datadir = /test/mysql3310/var/data
pid-file = /test/mysql3310/var/run/mysqld.pid
# InnoDB 路徑同步修改
innodb_data_home_dir = /test/mysql3310/var/data
innodb_log_group_home_dir = /test/mysql3310/var/data

重新初始化:mysql_install_db --defaults-file=/test/mysql3310/my.cnf --user=mysql

註冊服務:cp .../mysql.server /etc/init.d/mysql3310 並修改路徑。

常見坑點與解決

現象 原因 解決
mysql_install_db 報錯 unknown variable 'innodb=ON' 未編譯 InnoDB 插件 ./configure --with-plugins=innobase
啟動讀取錯誤的 my.cnf 未指定 --defaults-file 啟動、初始化、客戶端連線皆加 --defaults-file=...
Socket 連線失敗 多實例 socket 路徑衝突 各實例獨立 socket = /path/to/instance.sock
端口衝突 多實例未修改 port 各實例獨立 port(3306、3310、3311...)
資料目錄找不到 datadir 指向錯誤或未初始化 檢查 my.cnf 路徑,重跑 mysql_install_db

生產環境建議

  • 使用 mysqld_multi 管理多實例(官方工具,支援統一啟停)
  • 資源隔離:cgroups 限制 CPU/記憶體,避免單實例佔滿資源
  • 監控分離:Prometheus mysqld_exporter 指定不同 --collect.global_status 端口
  • 備份隔離:各實例獨立備份排程、獨立備份帳號

多實例部署核心在於「五隔離」:目錄、端口、Socket、配置檔、資源。掌握源碼編譯參數與 --defaults-file 機制,即可靈活應對各種隔離部署場景。

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