# 實例 1 (原有預設)
[mysqld1]
user = mysql
pid-file = /var/run/mysqld/mysqld1.pid
socket = /var/run/mysqld/mysqld1.sock
port = 3306
datadir = /var/lib/mysql
bind-address = 127.0.0.1
log = /var/lib/mysql/log.log
# 實例 2 (新增)
[mysqld2]
user = mysql
pid-file = /var/run/mysqld/mysqld2.pid
socket = /var/run/mysqld/mysqld2.sock
port = 3307
datadir = /var/lib/mysql2
bind-address = 127.0.0.1
log = /var/lib/mysql2/log.log
# 複製實例1資料目錄結構 (含 mysql 系統庫)
cp -R /var/lib/mysql /var/lib/mysql2
# 修正擁有者權限
chown -R mysql:mysql /var/lib/mysql2
# 或全新初始化 (MySQL 5.7+)
mysqld --initialize-insecure --datadir=/var/lib/mysql2 --user=mysql
# 啟動實例 1,2
mysqld_multi start 1,2
# 停止實例 1,2
mysqld_multi stop 1,2
# 重啟實例 2
mysqld_multi restart 2
# 檢查狀態
mysqld_multi report 1,2
# 查看進程
ps aux | grep mysql
# 方法一:指定埠號
mysql -P 3307 -u root -p
# 方法二:指定 Socket (更可靠)
mysql -u root -p -S /var/run/mysqld/mysqld2.sock
# 方法三:指定主機 + 埠
mysql -h 127.0.0.1 -P 3307 -u root -p
| 資源 | 配置原則 | 範例 (16GB RAM, 8核) |
|---|---|---|
| 記憶體 | 總和 ≤ 物理記憶體 80% | 實例1: innodb_buffer_pool=6G, 實例2: 4G |
| CPU | thread_concurrency = 核心數 × 2 | 各實例 thread_concurrency=8 |
| 磁碟 I/O | 分離資料目錄到不同物理磁碟/分區 | 實例1: /dev/sdb, 實例2: /dev/sdc |
| 連線數 | max_connections 總和 ≤ 系統檔案描述符限制 | 各實例 max_connections=500 |
| 日誌 | 獨立錯誤日誌、慢查詢日誌 | log-error=/var/log/mysql1/error.log |
# 主庫 (實例1 3306) my.cnf
[mysqld1]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
# 從庫 (實例2 3307) my.cnf
[mysqld2]
server-id = 2
relay-log = mysql-relay
read-only = 1
super-read-only = 1
# 建立復制帳號 (主庫)
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1' IDENTIFIED BY 'replpass';
# 配置從庫連線
CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='replpass',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
/etc/systemd/system/mysqld@.service 管理多實例mysqldump --protocol=TCP --port=3307 指定實例備份重複上述模式:[mysqld3] port=3308 datadir=/var/lib/mysql3 ... 以此類推。建議單機不超過 CPU 核心數實例數。