travelrecord 定義 10 個分片 (dn1~dn10),均在 MySQL 實例 A。log_bin、binlog_format=ROW、GTID_MODE=ON (推薦)。mysqldump -hA -uroot -p --single-transaction --master-data=2 --flush-logs \ --databases dn2 dn7 > /backup/dn2_dn7_full_$(date +%F).sql
--single-transaction 保證一致性視圖 (InnoDB)。--master-data=2 將 Binlog 位點作為註釋寫入文件頭。--flush-logs 滾動 Binlog,便於後續增量起點清晰。mysql -hB -uroot -p < /backup/dn2_dn7_full_$(date +%F).sql
read_only=ON 或刪除路由)。# 表級行數對比
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA IN ('dn2','dn7');
# 或使用 pt-table-checksum (推薦)
主要耗時 = 增量 Binlog 回放時間。典型 2 個分片、增量 < 1GB,回放 1~3 分鐘。總中斷可控在 5 分鐘內。
dn2 -> dn2_slave (實例 B)、dn7 -> dn7_slave (實例 B)。log_slave_updates=ON、read_only=ON。Seconds_Behind_Master=0 持續數天。read_only=ON)。SHOW SLAVE STATUS\G 顯示 Slave_SQL_Running_State: Slave has read all relay log)。STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=OFF;)。mysqlbinlog 解析舊主新增 Binlog → 新主重放。pt-table-checksum 快速校驗新主舊主數據一致性。主從切換通常 < 30 秒,校驗 1~2 分鐘,**總中斷可壓縮至 2~3 分鐘**。但前置成本高:需長期維護級聯從庫、監控延遲、佔用實例 B 資源。
| 維度 | 方案一:Dump+Binlog | 方案二:級聯切換 |
|---|---|---|
| 前置資源成本 | 低 (臨時佔用備份空間) | 高 (長期佔用實例 B 存儲/CPU/IO) |
| 業務中斷時間 | 3~5 分鐘 | 2~3 分鐘 |
| 操作複雜度 | 中 (標準化腳本可自動化) | 高 (需成熟主從切換工具鏈) |
| 風險點 | Binlog 位點對齊錯誤、大事務回放慢 | 切換瞬間數據衝突、從庫數據偏差 |
| 適用場景 | 通用、無現成高可用體系、分片數較少 | 已有 MHA/Orchestrator、極度敏感中斷時間、分片多 |
read_only=ON 觀察 24~48h,確認無異常再物理下線。Seconds_Behind_Master、Binlog_apply_latency、應用錯誤率、QPS 突變。MyCat 分片遷移的核心是「全量基準 + 增量追趕 + 原子切換」。方案一通用性強、門檻低,適合大多數團隊;方案二極致壓縮中斷,適合擁有成熟高可用體系的大廠。無論選哪套,**校驗一致性 (pt-table-checksum) + 觀察期保留舊分片** 是防止數據丟失的最後防線。