首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

單機多實例實戰:mysqld_multi 部署 MySQL 5.0 雙實例(3306/3307)完整手冊

     編輯:MySQL 資料庫相關知識

架構概覽

單一二進制、多組 datadir、多 my.cnf 區段、mysqld_multi 統一生命週期管理。適用於開發測試、多租戶隔離、版本平滑升級驗證。

環境與版本

  • OS:Red Hat Enterprise Linux AS 3 Update 8
  • MySQL:5.0.40(源碼編譯安裝)
  • 目標:兩實例,Port 3306 / 3307,資料目錄分離

步驟 1:基礎安裝(僅一次)

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 &

步驟 2:建立第二實例資料目錄與權限

cd /usr/local/mysql
cp -R var var1          # 複製預設資料目錄
chown -R mysql:mysql var1

步驟 3:建立管理帳號(供 mysqld_multi 關閉/啟動)

/usr/local/mysql/bin/mysql -uroot -p
GRANT SHUTDOWN ON *.* TO 'guzh'@'localhost' IDENTIFIED BY 'qazwsx';
FLUSH PRIVILEGES;
# 兩個實例皆需執行(初始化時已同步 user 表)

步驟 4:配置 /etc/my.cnf 多實例區段

[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 若啟用複寫亦須不同。

步驟 5:mysqld_multi 常用操作

mysqld_multi --config-file=/etc/my.cnf start 1-2mysqld_multi --config-file=/etc/my.cnf stop 2mysqld_multi --config-file=/etc/my.cnf report
操作指令範例
啟動所有實例
停止實例 2
查看狀態

GNR(Group Number)對應 [mysqldN] 尾數,支援範圍 1-3、列表 1,3,5。

步驟 6:客戶端連線驗證

# 連線實例 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/bin/mysqld_multi 啟動失敗:路徑衝突,請使用完整路徑 /usr/local/mysql/bin/mysqld_multi。
  • 客戶端報 /var/lib/mysql/temp.sock 錯誤:my.cnf 缺 socket 參數或客戶端 mysql.sock 找不到,補全 [client] socket=... 或連線帶 --protocol=tcp。

進階:systemd 管理(現代 Linux)

# /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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved