MySQL Replication (主從複寫) 是高可用與讀寫分離的基石。但單線程複寫、大事務阻塞、從庫硬體不足等問題常導致延遲。本文系統分析延遲類型、複寫容量評估、優化策略、從庫硬體選型、主從架構擴展與應用層適配。
| 類型 | 特徵 | 常見原因 |
|---|---|---|
| 固定性延遲 | 持續落後,白天嚴重、晚上追平 | 從庫負載達上限、白天訪問量大、硬體不足 |
| 非固定性延遲 | 短暫落後,可快速恢復 | 批次任務、報表查詢、低效 SQL 阻塞複寫執行緒 |
slave_parallel_workers),但跨庫事務仍串行# 1. 暫停複寫 1 小時
STOP SLAVE;
sleep 3600;
START SLAVE;
# 2. 觀察追平時間 (Seconds_Behind_Master 歸零)
# 容量比 = 暫停時間 / 追平時間
# 建議維持 3 倍以上 (1 小時延遲,20 分鐘追平)
-- 差:複雜查詢直接在 UPDATE/INSERT 中
INSERT ... SELECT ;
UPDATE ... WHERE ;
-- 優:分步驟,先寫入臨時表
CREATE TEMPORARY TABLE tmp AS SELECT ;
INSERT ... SELECT * FROM tmp;
binlog_format = ROWinnodb_buffer_pool_size、key_buffer_sizeSHOW SLAVE STATUS,延遲過大自動切主庫SHOW SLAVE STATUS\G
-- 關鍵欄位:
-- Seconds_Behind_Master: 延遲秒數 (NULL 表示斷開)
-- Slave_IO_Running / Slave_SQL_Running: Yes/No
-- Last_IO_Error / Last_SQL_Error: 錯誤詳情
-- Relay_Log_Space: Relay log 總大小
優化複寫核心在於:主庫減輕寫入、從庫強化硬體、SQL 避免大事務、架構分流讀寫、應用層感知延遲。升級至 MySQL 8.0 並啟用 Write-set 並行複寫 (slave_parallel_type=LOGICAL_CLOCK、slave_parallel_workers=4) 是現代化解單線程瓶頸的最直接手段。