| 工具 | 用途 | 現狀 |
| Osc (Online Schema Change) | 無鎖 DDL | → gh-ost (GitHub 重寫, Go, 無觸發器, 生產就緒) |
| MHA (Master High Availability) | 故障自動轉移 | → Orchestrator (GitHub, 拓撲管理、自動修復、Web UI) |
| MyRocks | RocksDB 儲存引擎 | → MySQL 5.7/8.0 官方插件、Percona Server 預編譯 |
| ProxySQL | 高效能 SQL Proxy | → 社區活躍、多叢集支援、查詢重寫、快取 |
| Canal / Maxwell / Debezium | Binlog CDC | → 異構同步標準組件 |
四、給普通團隊的避坑指南 (不必重寫一切代碼)
1. 分片策略:先單表優化,再垂直拆分,最後水平分片
- 單表優化:索引、分區表、歸檔冷數據、讀寫分離 — 解決 80% 問題
- 垂直拆庫:業務域解耦 (用戶、訂單、商品、日誌) — 降低耦合、獨立擴容
- 水平分片:最後手段。若必須,採用 中間件路由 (ShardingSphere/ProxySQL/Vitess) 而非應用層硬編碼
2. 快取架構:標準化叢集 + 一致性協議
- 棄用獨立 Memcached 實例,改用 Redis Cluster / Codis / Twemproxy + Redis
- 引入 快取穿透/擊穿/雪崩 標準防護:Bloom Filter、互斥鎖重建、隨機 TTL、熔斷降級
- 資料一致性:先更新 DB、再異步刪除快取 (Cache-Aside + 延遲雙刪),或 CDC 異步更新
3. Schema 變更:自動化、線上、可回滾
- 接入 gh-ost 或 pt-osc,納入 CI/CD 流程,禁止手工 DDL
- 建立 Shadow Table 驗證機制:新舊表同寫、比對結果、流量逐步切換
4. 備份恢復:標準化、異地、演練
- 物理備份 (XtraBackup/快照) + 邏輯備份 (mysqldump) 雙軌
- 異地多副本 (S3/OSS/跨區域),定期 全量恢復演練 (每季至少一次)
- 建立 RTO/RPO 目標 並納入 SLA 考核
5. 監控自動化:從「有人看圖」到「機器判斷」
- 指標標準化:
QPS、Latency P99、Connections、Replication Lag、Buffer Pool Hit Rate、Disk IOPS
- 告警分級:P0 (頁面/電話)、P1 (工單)、P2 (郵件/Slack)
- 自動化修復:
Replication Lag > 300s → 自動切換只讀流量、殺長查詢、補同步
五、結論:不要重寫一切,要建立標準化平台
Stonebraker 的「比死還糟」指向的是缺乏平台化、自動化、標準化的分片叢集,而非 MySQL 本身。Facebook 後來的演進證明:通過工程平台吸收複雜度,而非業務代碼吸收複雜度,才是規模化之道。
對於絕大多數團隊:
- 單庫單表支撐千萬行、QPS 萬級完全可行 (良好索引 + 讀寫分離 + 快取)
- 先用好 主從、讀寫分離、CDC、自動化備份、線上 DDL 這套「標準組合拳」
- 業務增長到單庫極限時,優先考慮 垂直拆庫 + 服務化,而非水平分片
- 真正需要水平分片時,直接上 Vitess / ShardingSphere / PolarDB-X / TiDB 等 NewSQL/中間件方案
技術債務不可怕,可怕的是沒有償還機制。建立標準化運維平台,將複雜度封裝在基礎設施層,讓業務開發專注於領域邏輯,這才是從「比死還糟」走向「生生不息」的正確路徑。下一篇我們將探討 MySQL 異常處理與存儲過程錯誤捕獲最佳實踐,敬請期待。
- 上一篇文章: MySQL Binlog 內部機制深度解析:從寫入流程到主從複制的核心原理
- 下一篇文章: MySQL 存儲過程異常處理實戰:DECLARE HANDLER 與事務控制的最佳實踐
Copyright ©
程式碼之家 All Rights Reserved