首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 多實例部署指南:mysqld_multi 實現單機多端口運行

     編輯:MySQL 綜合教學

適用場景

  • 開發/測試/生產環境隔離,共用一台物理機。
  • 不同業務線獨立資料目錄、配置、權限,避免互相影響。
  • 資源有限時,替代多台伺服器或容器化方案。

環境準備

  • OS:Linux(RedHat/CentOS/Ubuntu 等)
  • MySQL:5.x / 8.x RPM 或二進制安裝
  • 規劃兩個實例:3307、3308

核心配置:my.cnf 多實例段落

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = multi_admin
password   = multi_pass

[mysqld1]          # 實例 1 (GNR=1)
socket     = /data/mysqldata/master/mysql.sock
port       = 3307
pid-file   = /data/mysqldata/master/mysql.pid
datadir    = /data/mysqldata/master
user       = mysql
server-id  = 1
# 其餘緩衝區參數按需配置...

[mysqld2]          # 實例 2 (GNR=2)
socket     = /data/mysqldata/slave/mysql.sock
port       = 3308
pid-file   = /data/mysqldata/slave/mysql.pid
datadir    = /data/mysqldata/slave
user       = mysql
server-id  = 2
# 其餘緩衝區參數按需配置...

# 共用客戶端工具段落
[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
關鍵點: 每個 [mysqld#] 對應一個 GNR(Group Number),必須指定獨立的 datadir、socket、port、pid-file、server-id。

初始化資料目錄

# 實例 1
mkdir -p /data/mysqldata/master
chown -R mysql:mysql /data/mysqldata/master
mysqld --initialize-insecure --datadir=/data/mysqldata/master --user=mysql

# 實例 2
mkdir -p /data/mysqldata/slave
chown -R mysql:mysql /data/mysqldata/slave
mysqld --initialize-insecure --datadir=/data/mysqldata/slave --user=mysql

建立管理帳號(供 mysqld_multi 關閉實例用)

# 在每個實例啟動後執行
mysql -u root -p -S /data/mysqldata/master/mysql.sock -e "CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multi_pass'; GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';"
mysql -u root -p -S /data/mysqldata/slave/mysql.sock  -e "CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multi_pass'; GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';"

啟動 / 停止 / 狀態查看

# 啟動實例 1 和 2
mysqld_multi --defaults-file=/etc/my.cnf start 1,2

# 停止實例 1
mysqld_multi --defaults-file=/etc/my.cnf stop 1

# 查看所有實例狀態
mysqld_multi --defaults-file=/etc/my.cnf report

GNR 寫法:1、1,2、1-3、1,3-5(逗號分隔、連字符表示範圍,**不可有空格**)。

客戶端連線

# 連線實例 1
mysql -u multi_admin -pmulti_pass -P 3307 -h 127.0.0.1 --protocol=TCP

# 連線實例 2
mysql -u multi_admin -pmulti_pass -P 3308 -h 127.0.0.1 --protocol=TCP
必須指定 -P 端口與 -h 127.0.0.1,否則客戶端會嘗試連接預設 3306 或本地 socket,導致「Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'」錯誤。

常見問題排查

現象原因解決
WARNING! my_print_defaults command not found!PATH 缺少 MySQL bin 目錄export PATH=$PATH:/usr/bin 或用絕對路徑
FATAL ERROR: Tried to use mysqladmin in group [mysqld1], but no mysqladmin binary was found[mysqld_multi] 段未指定 mysqladmin 路徑在 [mysqld_multi] 加 mysqladmin = /usr/bin/mysqladmin
啟動失敗,日誌提示 Can't create test filedatadir 權限或路徑錯誤確認 chown -R mysql:mysql datadir 且路徑存在
端口衝突3307/3308 被佔用netstat -tlnp | grep 330 檢查並修改 port

進階:systemd 管理多實例(現代 Linux 推薦)

# /etc/systemd/system/mysqld@.service
[Unit]
Description=MySQL Server (instance %i)
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/mysqld_multi --defaults-file=/etc/my.cnf start %i
ExecStop=/usr/bin/mysqld_multi --defaults-file=/etc/my.cnf stop %i
PIDFile=/data/mysqldata/%i/mysql.pid

[Install]
WantedBy=multi-user.target

啟用:systemctl enable mysqld@1 mysqld@2 && systemctl start mysqld@1 mysqld@2

結語

mysqld_multi 是 MySQL 官方提供的輕量級多實例管理工具,配置清晰、啟停方便、資源隔離徹底。配合獨立 datadir、socket、port、server-id,即可在單機穩定運行多個互不干擾的 MySQL 服務。現代部署建議改用 systemd 模板單元或容器化(Docker/K8s),獲得更好的生命週期管理與資源配額控制。

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