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

MySQL 服務維護筆記(下):多實例管理、啟停腳本詳解與災備策略

     編輯:MySQL 資料庫相關知識

MySQL 服務器規劃:分離程序與數據(續)

延續上篇核心思想:程序文件與數據文件安裝在不同物理硬件,目錄結構如下:

硬盤 1                          硬盤 2
├── /usr                        ├── /data/app_1/   (應用數據、啟動腳本)
├── /home/mysql                 ├── /data/app_2/
│   └── (指向最新版本的鏈接)    ├── /data/app_3/
├── /home/mysql-3.23.54/        (最新版本 MySQL)
└── /home/mysql-old/            (舊版本備份)

MySQL 服務安裝與編譯優化(續)

./configure --prefix=/home/mysql --without-innodb
make
make install
  • 避免 --with-charset:僅影響排序,增加遷移複雜度
  • 避免 InnoDB:除非必須事務/外鍵,性能損耗巨大

服務啟動腳本深度解析

啟動腳本:start_mysql.sh

#!/bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/home/mysql/bin/safe_mysqld \
  --user=mysql \
  --pid-file="$rundir"/mysql.pid \
  --datadir="$rundir"/var \
  -O max_connections=500 \
  -O wait_timeout=600 \
  -O key_buffer=32M \
  --port=3402 \
  --socket="$rundir"/mysql.sock &

參數設計哲學

  • 文件集中化:--pid-file、--socket、--datadir 全指向 $rundir,實現「一個目錄管一個實例」
  • 性能調優參數:-O 後的全局變量需根據業務實測調整
  • 端口隔離:--port 區分不同業務服務,繞開單實例連接數瓶頸

系統級註冊:rc.local

/data/app_1/start_mysql.sh
/data/app_2/start_mysql.sh
/data/app_3/start_mysql.sh

必須寫絕對路徑,確保開機自啟可靠性。

停止腳本:stop_mysql.sh

#!/bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/home/mysql/bin/mysqladmin \
  -u mysql \
  -S "$rundir"/mysql.sock shutdown

此架構的三大核心優勢

1. 多服務啟動極簡

新增服務只需複製目錄、修改 --port 參數。單目錄下的數據與腳本可獨立打包、遷移、版本控制。

2. 運行時文件完全隔離

mysql.pid、mysql.sock 等臨時文件各歸其主目錄,多實例互不干擾。避免了放在 /tmp 時被系統清理或其他程序誤刪的風險。

3. 硬件故障秒級恢復

程序在硬盤 1,數據在硬盤 2。硬盤 1 掛了,直接把硬盤 2 掛到新服務器(已裝好同版本 MySQL)即可立即對外服務。若配置寫在 my.cnf 還需額外備份配置,而腳本方案天然攜帶配置。

運維心法:「數據與程序分離、實例與實例隔離、配置與代碼同版本」是高可用 MySQL 架構的三板斧。

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