多實例共存的關鍵在於**資源隔離**:不同 TCP 端口、不同 Unix Socket 文件、不同數據目錄、不同配置文件、不同進程 PID 文件。
./configure \
--with-tcp-port=3307 \
--with-unix-socket=/tmp/mysql2.sock \
--prefix=/usr/local/mysql-3307 \
--datadir=/data/mysql2
make && make install
--prefix:安裝根目錄隔離。--datadir:數據目錄隔離(也可運行時指定)。使用 mysqld_safe 或 mysqld 直接傳參:
# 實例 2
/usr/local/mysql/bin/mysqld_safe \
--defaults-file=/etc/my2.cnf \
--port=3307 \
--socket=/tmp/mysql2.sock \
--datadir=/data/mysql2 \
--pid-file=/var/run/mysqld2.pid \
--log-error=/var/log/mysqld2.err &
my2.cnf 至少包含:
[mysqld]
port=3307
socket=/tmp/mysql2.sock
datadir=/data/mysql2
pid-file=/var/run/mysqld2.pid
log-error=/var/log/mysqld2.err
| 方式 | 示例 |
|---|---|
| TCP 端口 | mysql -h 127.0.0.1 -P 3307 -u root -p |
| Unix Socket | mysql -S /tmp/mysql2.sock -u root -p |
| 環境變量 | export MYSQL_TCP_PORT=3307; export MYSQL_UNIX_PORT=/tmp/mysql2.sock |
客戶端配置文件 ~/.my.cnf | [client] port=3307 socket=/tmp/mysql2.sock |
/etc/init.d/mysql 為 /etc/init.d/mysql2,修改內部 datadir、pid_file、socket、port 變量。chkconfig --add mysql2 註冊服務。嚴禁兩個實例指向同一 datadir 同時寫入數據(除非只讀掛載)。InnoDB/MyISAM 無法協調雙進程並發寫入同一表空間/文件,會導致數據損壞。