MySQL 如何從容應對半年數十 TB 數據爆發式增長:聽雲架構演進實戰
聽雲後端在半年內業務量暴增十倍,數據量從 TB 級躍升至數十 TB。本文複盤其 MySQL 分布式架構演進全過程:從垂直拆分優先策略、優雅擴容遷移、數據傾斜治理、分布式 Join 避坑,到組件選型哲學與運維自動化建設,為大規模 MySQL 落地提供寶貴參考。
一、 背景與架構基礎
- 業務增長:半年增長 10+ 倍,數據從幾 TB → 數十 TB。
- 架構模式:中間件 Amoeba 實現分庫分表 + 讀寫分離。
- 節點拓撲:數百個分片組,每組 1 主 1 從。Master 寫,Slave 讀。
![架構拓撲圖]()
二、 正確的拆分姿勢:垂直優先,水平在後
反面教材:過早水平拆分的代價
- 業務未設計分片鍵,強行水平拆分導致跨分片 Join、分布式事務難題。
- 後期需垂直拆分(如按時間維度分表)時,需同時遷移所有水平分片,工作量呈指數級增長(8 分片 → 8 組遷移;64 分片 → 不敢想)。
推薦路線
- 第一階段:垂直拆分。按業務域拆分為多個獨立庫(用戶庫、訂單庫、日誌庫...),應用配置多數據源或中間件路由。零代碼改動,容量性能翻倍。
- 第二階段:單庫瓶頸再水平拆分。垂直庫內單表過大時,按合理鍵(如 user_id)分片。
三、 優雅的從 N 到 2N:擴容遷移實戰
場景
4 分片擴容為 8 分片,需遷移 mod(id,4)=2 的數據到新分片。
傳統方案痛點
- 全備恢復 → 大表 DELETE → OPTIMIZE TABLE 釋放空間 → 同步增量 → 切換。
缺陷:耗時極長,DELETE 產生巨大 Undo 佔用空間不釋放,OPTIMIZE 重建表再次鎖表。
優雅方案:mysqldump --where 邏輯備份
mysqldump -h src_host -u root -p db_name table_name --where="mod(id,4)=2" | mysql -h dst_host -u root -p db_name
- 單次導出目標分片數據,無需全量備份再刪除。
- 邏輯導入天然整理碎片,無需 OPTIMIZE。
- 高效、優雅、可控。
四、 數據傾斜治理:從大存儲到 ToKuDB 壓縮
現象
少數分片因大客戶導致數據增長異常,單分片突破 TB 級。
演進方案
- 臨時方案:遷移至 1TB SSD 實例。
- 根治方案:擴展 Amoeba 支持「單租戶獨享分片」,核心大客戶獨佔分片組。
存儲引擎切換 ToKuDB:基於 Fractal Tree 索引,壓縮比 5-10x,在線 DDL 秒級,寫入性能優於 InnoDB,查詢略有損耗。
已進入生產驗證尾聲。
五、 分布式 Join:業務規避優於中間件強行解決
聽雲策略
業務設計階段即避免跨分片 Join。每個報表維度對應一張獨立寬表,查詢單表聚合,無 Join 需求。
業界通用兩種方案(供參考)
- 全局表:小維度表(如字典、配置)全量同步到所有分片,本地 Join。限制:表小、更新頻率低。
- E-R 親和性路由:訂單按用戶 ID 分片,用戶與訂單落同一分片,單分片內 Join。要求業務建模階段識別實體關係。
中間件層面,MyCat、DRDS 對分布式 Join 支持較完善,但不建議依賴中間件解決本應在業務層解決的問題。
六、 MySQL 擅長什麼?組件選型哲學
「不要有 All in One 的想法,讓每個組件做自己擅長的事。」
- MySQL 擅長:結構化查詢、事務一致性、點查/範圍查、中小數據量聚合。
- MySQL 不擅長:海量數據掃描、複雜多表 Join、非結構化分析。
實戰案例
年度行業報表需掃描數億行、多字段 Group By Sum。MySQL 給 24GB 內存仍 OOM。
正解:數據同步至 Hadoop,用 Impala 9 分鐘完成 7 億行聚合。
七、 分布式架構下的運維痛點與自動化建設
痛點 1:跨分片統計
中間件不支持全量掃描。現狀:自動化腳本逐分片提取 → 應用層聚合。目標:構建統一 OLAP 查詢層(如 ClickHouse/StarRocks)。
痛點 2:DDL 變更
數百分片執行 ALTER TABLE,中間件多不支持。現狀:並行腳本批量執行 → 校驗腳本人工核對。
規劃:開發友好輸出、全自動化的 Schema 變更平台(參考 gh-ost/pt-osc 整合)。
心得
「應對這樣的情景,髮型必然會稍顯凌亂,但必須重新設計腳本,寫出完全自動化的工具。」—— 運維自動化是規模化的生存線。
八、 總結
- 拆分順序:垂直優先,水平在後。
- 擴容遷移:mysqldump --where 邏輯備份,拒絕大表 Delete。
- 傾斜治理:大客戶隔離 + ToKuDB 壓縮。
- 分布式 Join:業務層親和性建模 規避。
- 組件選型:專業的事交給專業的組件(MySQL + Hadoop/Impala)。
- 運維核心:自動化平台化,消除人工介入。
原文鏈接:聽雲博客 - MySQL 如何應對半年數十 TB 數據增量