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

單機運行多個 MySQL 實例:完整配置與避坑指南

     編輯:MySQL 資料庫相關知識

適用場景

  • 測試新版本不影響正式環境。
  • ISP 為不同客戶提供隔離的 MySQL 服務。
  • 多專案需不同參數調校。

核心原則:端口與 Socket 必須唯一

每個實例需獨立的:

  • TCP/IP 埠號(--port)
  • Unix Socket 檔案(--socket)
  • 資料目錄(--datadir)
  • 錯誤日誌、慢查詢日誌、二進制日誌路徑
  • server-id(複寫環境必須)

方法一:重新編譯指定不同預設值(永久)

./configure \
  --with-tcp-port=3307 \
  --with-unix-socket=/tmp/mysql2.sock \
  --prefix=/usr/local/mysql-5.7

編譯後安裝至不同 --prefix 目錄,啟動腳本、設定檔皆互不干擾。

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

使用 mysqld_safe 或 mysqld 直接傳參數:

# 實例 1(正式)
/usr/local/mysql/bin/mysqld_safe \
  --defaults-file=/etc/my.cnf \
  --datadir=/var/lib/mysql \
  --socket=/var/lib/mysql/mysql.sock \
  --port=3306 &

# 實例 2(測試)
/usr/local/mysql/bin/mysqld_safe \
  --defaults-file=/etc/my2.cnf \
  --datadir=/var/lib/mysql2 \
  --socket=/var/lib/mysql2/mysql.sock \
  --port=3307 &

--defaults-file 指定獨立設定檔,避免參數過長且易維護。

設定檔範例 /etc/my2.cnf

[mysqld]
server-id       = 2
port            = 3307
socket          = /var/lib/mysql2/mysql.sock
datadir         = /var/lib/mysql2
log-error       = /var/log/mysql2/error.log
pid-file        = /var/run/mysqld/mysqld2.pid
log-bin         = /var/log/mysql2/binlog
slow-query-log  = 1
slow-query-log-file = /var/log/mysql2/slow.log

初始化第二個資料目錄

mysql_install_db --datadir=/var/lib/mysql2 --user=mysql
chown -R mysql:mysql /var/lib/mysql2

客戶端連線指定實例

# 連線埠 3307
mysql -h 127.0.0.1 -P 3307 -u root -p

# 或指定 Socket(僅本機)
mysql -S /var/lib/mysql2/mysql.sock -u root -p

程式碼中連線參數同理傳入 port 或 socket。

關鍵警告

嚴禁兩個實例指向同一資料目錄進行寫入! 若作業系統鎖機制失效,會導致資料損毀、索引錯亂等災難性後果。唯讀備份實例可共享資料目錄,但需極度小心。

系統服務化管理

編輯 /etc/init.d/mysql 或撰寫 systemd service 檔,支援 start|stop|restart 多實例:

# systemd 範例:/etc/systemd/system/mysql2.service
[Unit]
Description=MySQL 5.7 Test Instance
After=network.target

[Service]
Type=forking
User=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my2.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin --defaults-file=/etc/my2.cnf shutdown
PIDFile=/var/run/mysqld/mysqld2.pid

[Install]
WantedBy=multi-user.target

啟用:systemctl enable mysql2 && systemctl start mysql2

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