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

MySQL 多實例部署全流程:RHEL 6.4 環境下二進制包部署 3306/3307 雙實例實戰

     編輯:MySQL 綜合教學

MySQL 多實例部署全流程:RHEL 6.4 環境下二進制包部署 3306/3307 雙實例實戰

多實例部署是單機資源隔離、多版本共存、業務邊界劃分的經典方案。本文以 RHEL 6.4 + MySQL 5.6.26 二進制包為例,詳述用戶創建、目錄規劃、配置文件隔離、啟動腳本封裝、數據初始化、密碼管理、服務驗證全流程,並給出生產環境多實例監控、備份、升級標準化建議。

一、環境基線與軟體準備

  • OS:RHEL 6.4 最小化安裝
  • MySQL:mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz(通用二進制包,免編譯)
  • 依賴:yum -y install ncurses-devel libaio-devel

二、用戶與目錄規劃

# 1. 創建專用用戶
useradd -M -s /sbin/nologin mysql

# 2. 解壓安裝包至統一目錄
tar xf mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz -C /usr/local
mv /usr/local/mysql-5.6.26-linux-glibc2.5-x86_64 /usr/local/mysql

# 3. 實例級目錄隔離(核心:basedir 共享,datadir/socket/log/pid 獨立)
mkdir -p /data/{3306,3307}/{data,log}
tree /data/
# /data/
# ├── 3306
# │   ├── data
# │   └── log
# └── 3307
#     ├── data
#     └── log

三、配置文件隔離:my.cnf 關鍵差異化

3.1 實例 3306 - /data/3306/my.cnf

[client]
port = 3306
socket = /data/3306/mysql.sock

[mysqld]
port = 3306
socket = /data/3306/mysql.sock
pid-file = /data/3306/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id = 1
# log-bin=mysql-bin
# log-bin-index=mysql-bin.index

log_error = /data/3306/log/mysql-error.log
slow_query_log = 1
slow_query_log_file = /data/3306/log/mysql-slow.log

3.2 實例 3307 - /data/3307/my.cnf

[client]
port = 3307
socket = /data/3307/mysql.sock

[mysqld]
port = 3307
socket = /data/3307/mysql.sock
pid-file = /data/3307/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3307/data
server-id = 2
# log-bin=mysql-bin
# log-bin-index=mysql-bin.index

log_error = /data/3307/log/mysql-error.log
slow_query_log = 1
slow_query_log_file = /data/3307/log/mysql-slow.log

核心隔離點**:port、socket、pid-file、datadir、server-id、log_error、slow_query_log_file 必須唯一。

四、啟動腳本封裝:參數化實例管理

4.1 實例 3306 - /data/3306/mysql

#!/bin/sh
. /etc/init.d/functions
port=3306
mysql_user="root"
mysql_pwd=""
mysql_sock="/data/${port}/mysql.sock"
CmdPath="/usr/local/mysql/bin"

usage() { printf "Usage: /data/${port}/mysql {start|stop|restart}\n"; }

start_mysql() {
  if [ ! -e "$mysql_sock" ]; then
    /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
    action "Starting MySQL..." /bin/true
  else
    printf "MySQL is running...\n"; exit
  fi
}

stop_mysql() {
  if [ ! -e "$mysql_sock" ]; then
    printf "MySQL is stopped...\n"; exit
  else
    action "Stoping MySQL..." /bin/true
    ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
  fi
}

restart_mysql() { stop_mysql >/dev/null; sleep 2; start_mysql >/dev/null; action "Restarting MySQL..." /bin/true; }

[ $# -ne 1 ] && usage
case $1 in start) start_mysql;; stop) stop_mysql;; restart) restart_mysql;; *) usage;; esac

4.2 實例 3307 - /data/3307/mysql

同上,僅修改 port=3307 及對應路徑變量。

五、權限授予與環境變數

chown -R mysql:mysql /data
chmod +x /data/3306/mysql /data/3307/mysql
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

六、數據初始化與啟動驗證

cd /usr/local/mysql/scripts
./mysql_install_db --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data

/data/3306/mysql start
/data/3307/mysql start
netstat -lntp | grep 330
# tcp  0  0 0.0.0.0:3306  0.0.0.0:*  LISTEN  12345/mysqld
# tcp  0  0 0.0.0.0:3307  0.0.0.0:*  LISTEN  12346/mysqld

七、密碼初始化與持久化

# 實例 3306
mysql -S /data/3306/mysql.sock -e "UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root'; FLUSH PRIVILEGES;"
# 實例 3307
mysql -S /data/3307/mysql.sock -e "UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root'; FLUSH PRIVILEGES;"

# 寫回啟動腳本(避免每次操作輸入密碼)
sed -i 's/mysql_pwd=""/mysql_pwd="123456"/g' /data/3306/mysql /data/3307/mysql

八、生產環境多實例標準化建議

維度建議
端口規劃3306 基線,業務隔離遞增(3307, 3308...),避開系統保留端口
資源隔離cgroups 限制 CPU/記憶體、獨立磁碟掛載 datadir、獨立 tmpdir
監控接入Prometheus mysqld_exporter 多端口採集、標籤區分 instance=3306/3307
備份策略實例級獨立備份腳本、錯峰執行、Binlog 統一歸檔
升級發布滾動升級:停一啟一、驗證無誤再升級下一實例、保留回滾腳本
配置管理Ansible/SaltStack 模版化渲染 my.cnf、啟動腳本、防火牆規則

九、核心操作速查

  • 連線指定實例**:mysql -u root -p -S /data/3307/mysql.sock
  • 平滑關閉**:mysqladmin -u root -p123456 -S /data/3306/mysql.sock shutdown
  • 查看錯誤日誌**:tail -f /data/3306/log/mysql-error.log

多實例部署的核心是「basedir 共享,datadir 隔離,配置參數化,運維標準化」。將上述流程封裝為 Ansible Role 或 Shell 函數庫,實現「單條命令部署新實例、單條命令滾動升級」,讓多實例管理從手工藝走向工業化。

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