| 模式 | 隔離層級 | 資源共享 | 維護複雜度 | 適用場景 |
| 編譯時指定不同 prefix/port/socket | 完全獨立 (二進位、配置、資料) | 無 | 高 (升級需重編) | 測試新版本、嚴格隔離租戶 |
| 同二進位,不同配置檔 + 啟動參數 | 資料、埠、Socket、日誌隔離 | 共享二進位、庫 | 低 (推薦) | 多租戶、開發/測試/生產共機 |
模式二實戰配置 (推薦)
1. 目錄結構規劃
/opt/mysql/
├── 3306/ # 實例 1
│ ├── data/
│ ├── logs/
│ ├── tmp/
│ └── my.cnf
├── 3307/ # 實例 2
│ ├── data/
│ ├── logs/
│ ├── tmp/
│ └── my.cnf
└── bin/ # 共享 mysqld 二進位 (或軟連結)
2. 實例配置檔範例 (/opt/mysql/3306/my.cnf)
[mysqld]
port = 3306
socket = /opt/mysql/3306/tmp/mysql.sock
datadir = /opt/mysql/3306/data
pid-file = /opt/mysql/3306/tmp/mysqld.pid
log-error = /opt/mysql/3306/logs/error.log
slow_query_log_file = /opt/mysql/3306/logs/slow.log
tmpdir = /opt/mysql/3306/tmp
basedir = /opt/mysql/bin
# 其餘參數依實例需求調整
3. 初始化與啟動
# 初始化實例 1
/opt/mysql/bin/mysqld --initialize-insecure --datadir=/opt/mysql/3306/data --basedir=/opt/mysql/bin
# 啟動 (使用 mysqld_safe 或 systemd)
/opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/3306/my.cnf &
# 或 systemd 服務檔 (/etc/systemd/system/mysqld@.service)
[Service]
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/opt/mysql/%i/my.cnf
# systemctl start mysqld@3306
4. 客戶端連線
# 指定 Socket
mysql -u root -p -S /opt/mysql/3306/tmp/mysql.sock
# 或指定 Port (需啟用 TCP)
mysql -u root -p -h 127.0.0.1 -P 3306
# 環境變數簡化
export MYSQL_UNIX_PORT=/opt/mysql/3306/tmp/mysql.sock
mysql -u root -p
關鍵隔離清單
- Port:3306, 3307, 3308...
- Socket:各實例獨立
tmp/mysql.sock
- Datadir:完全獨立目錄
- Log:error.log, slow.log, binlog 目錄分離
- PID:獨立 pid-file
- tmpdir:避免臨時表衝突
監控與備份
- Prometheus
mysqld_exporter 指定 --collect.global_status --collect.global_variables --config.my-cnf=/opt/mysql/3306/my.cnf。
- 備份腳本遍歷實例目錄,讀取對應
my.cnf 取得 Socket/Port 執行 mysqldump。
- 上一篇文章: MySQL Root 密碼遺失替代方案:替換 mysql 系統資料庫目錄快速恢復存取權
- 下一篇文章: 開源 J2EE 開發環境搭建:Eclipse + JBoss + MySQL 整合配置全紀錄(含 JDBC 資料源設定)
Copyright ©
程式碼之家 All Rights Reserved