高負載網站中,PHP 與 MySQL 同機運行是效能瓶頸。本文提出將 MySQL 獨立部署為專用資料庫伺服器的規劃、安裝、啟動/停止腳本設計、多實例隔離與備份恢復策略。
為利維護、升級、備份與資料安全,**程式檔案與資料檔案應放在不同實體硬碟**:
硬碟1 (系統/程式) 硬碟2 (資料/應用)
/
├── /usr <-- 作業系統
├── /home/mysql <-- MySQL 主目錄 (指向最新版本的符號連結)
│ ├── /home/mysql-3.23.54/ <-- 最新版本
│ └── /home/mysql-old/ <-- 舊版本備份
/
└── /data/app_1/ <-- 應用1 資料與啟動腳本
├── /data/app_2/ <-- 應用2
└── /data/app_3/ <-- 應用3
--with-charset=:僅影響排序規則,卻增加資料遷移複雜度。InnoDB(早期版本):除非需要外鍵/交易,否則 MyISAM 效能優勢明顯(數量級差距)。./configure --prefix=/home/mysql --without-innodb make make install
cp -r mysql/var/mysql /data/app_1/
#!/bin/sh rundir=`dirname "$0"` echo "$rundir" /home/mysql/bin/safe_mysqld \ --user=mysql \ --pid-file="$rundir"/mysql.pid \ --socket="$rundir"/mysql.sock \ --datadir="$rundir"/var \ -O max_connections=500 \ -O wait_timeout=600 \ -O key_buffer=32M \ --port=3402 \ "$@" &
| 參數 | 用途 |
|---|---|
| --pid-file / --socket / --datadir | 將 PID、Socket、資料檔集中在應用目錄,避免多實例衝突 |
| -O 參數 | 全域變數優化(連線數、逾時、索引緩衝) |
| --port | 不同應用用不同 Port 隔離,單一服務連線數是主要瓶頸 |
/data/app_1/start_mysql.sh /data/app_2/start_mysql.sh /data/app_3/start_mysql.sh
#!/bin/sh rundir=`dirname "$0"` echo "$rundir" /home/mysql/bin/mysqladmin -u mysql -S"$rundir"/mysql.sock shutdown
/data/app_1/
├── start_mysql.sh
├── stop_mysql.sh
├── mysql.pid
├── mysql.sock
└── var/
├── mysql/ <-- 系統庫
├── app_1_db_1/ <-- 應用庫
└── app_1_db_2/
「程式資料分離、多實例隔離、腳本化管理」是高可用 MySQL 架構的三大支柱。下篇將深入備份策略、災難恢復與應用層優化設計。