單一二進制、多組 datadir、多 my.cnf 區段、mysqld_multi 統一生命週期管理。適用於開發測試、多租戶隔離、版本平滑升級驗證。
groupadd mysql
useradd -g mysql mysql
tar zxvf mysql-5.0.40.tar.gz
cd mysql-5.0.40
./configure --prefix=/usr/local/mysql \
--datadir=/usr/local/mysql/var \
--sysconfdir=/etc
make && make install
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
bin/mysqld_safe --user=mysql &
cd /usr/local/mysql
cp -R var var1 # 複製預設資料目錄
chown -R mysql:mysql var1
/usr/local/mysql/bin/mysql -uroot -p
GRANT SHUTDOWN ON *.* TO 'guzh'@'localhost' IDENTIFIED BY 'qazwsx';
FLUSH PRIVILEGES;
# 兩個實例皆需執行(初始化時已同步 user 表)
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = guzh
password = qazwsx
[mysqld1] # Port 3306
port = 3306
socket = /var/lib/mysql/mysql.sock
pid-file = /usr/local/mysql/var/mysql.pid
datadir = /usr/local/mysql/var
# ... 其餘 buffer 參數同下
[mysqld2] # Port 3307
port = 3307
socket = /var/lib/mysql/mysql1.sock
pid-file = /usr/local/mysql/var1/mysql1.pid
datadir = /usr/local/mysql/var1
# ... 其餘 buffer 參數同上
關鍵點:datadir、socket、pid-file、port四項必須唯一;server-id若啟用複寫亦須不同。
| 操作 | 指令範例 |
|---|---|
| 啟動所有實例 | |
| 停止實例 2 | |
| 查看狀態 |
GNR(Group Number)對應 [mysqldN] 尾數,支援範圍 1-3、列表 1,3,5。
# 連線實例 1
/usr/local/mysql/bin/mysql -uguzh -pqazwsx -P3306 -h127.0.0.1
# 連線實例 2
/usr/local/mysql/bin/mysql -uguzh -pqazwsx -P3307 -h127.0.0.1
必須顯式指定-P與-h 127.0.0.1(強制 TCP),否則 Unix socket 會預設連 3306。
/usr/local/mysql/bin/mysqld_multi。/var/lib/mysql/temp.sock 錯誤:my.cnf 缺 socket 參數或客戶端 mysql.sock 找不到,補全 [client] socket=... 或連線帶 --protocol=tcp。# /etc/systemd/system/mysqld@.service
[Unit]
Description=MySQL Server %i
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf start %i
ExecStop=/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf stop %i
PIDFile=/usr/local/mysql/var%/mysql%.pid
[Install]
WantedBy=multi-user.target
啟用:systemctl enable mysqld@1 mysqld@2 && systemctl start mysqld@1 mysqld@2。