每個實例需獨立的:
--port)--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