在單機運行多個 MySQL 實例,核心在於隔離:獨立的數據目錄、配置文件、端口、Socket、PID 文件、錯誤日誌。本文以 3307 實例為例演示標準化部署流程。
mysql_install_db --datadir=/data/mysql_3307
chown -R mysql:mysql /data/mysql_3307
關鍵: 權限缺失會導致 Errcode: 13(文件權限拒絕)。
my.cnfcp /etc/my.cnf /data/mysql_3307/my.cnf
編輯關鍵差異化參數:
[mysqld] port = 3307 socket = /data/mysql_3307/mysql.sock pid-file = /data/mysql_3307/mysql.pid log-error = /data/mysql_3307/mysql-error.log datadir = /data/mysql_3307 basedir = /usr/local/mysql # 若報錯找不到 errmsg.sys,需額外指定: language = /usr/local/mysql/share/mysql/english
start_3307.sh#!/bin/bash rundir=$(pwd) datadir=$rundir cnf=$rundir/my.cnf echo "server path: $rundir" echo "data path: $datadir" echo "cnf: $cnf" /usr/local/mysql/bin/mysqld_safe \ --defaults-file="$cnf" \ --pid-file="$rundir/mysql.pid" \ --datadir="$datadir" \ --socket="$rundir/mysql.sock" \ &
賦予執行權限:chmod +x start_3307.sh
./start_3307.sh # 檢查進程 ps -ef | grep mysql # 連接測試 mysql -S /data/mysql_3307/mysql.sock -u root -p
| 錯誤現象 | 根因 | 解決方案 |
|---|---|---|
File './mysql-bin.index' not found (Errcode: 13) | 數據目錄權限未授予 mysql 用戶 | chown -R mysql:mysql /data/mysql_3307 |
Can't find messagefile '/data/mysql_3307/share/mysql/english/errmsg.sys' | 語言文件路徑未指向基礎安裝目錄 | my.cnf 添加 language = /usr/local/mysql/share/mysql/english |
| 客戶端連不上 | 未指定正確 socket 或配置文件 | mysql --defaults-file=/data/mysql_3307/my.cnf -u root -p |
mysqld_multi 統一管理多實例啟停log-bin、relay-log、server-id 做主從複制Prometheus mysqld_exporter 區分實例標籤cgroups 限制 CPU/記憶體,避免單實例佔滿資源