首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MyCat 分片環境下雙機房數據遷移實戰:最小化業務中斷的兩套方案對比

     編輯:MySQL 綜合教學

場景描述

  • 邏輯表 travelrecord 定義 10 個分片 (dn1~dn10),均在 MySQL 實例 A。
  • 需將其中 2 個分片 (如 dn2、dn7) 遷移至 MySQL 實例 B。
  • 目標:數據零丟失、業務中斷時間 < 5 分鐘。

方案一:mysqldump 全量 + Binlog 增量 (經典 DBA 手法)

前置準備

  • MyCat 新配置文件就緒 (目標分片指向實例 B)。
  • 確保兩實例均開啟 log_bin、binlog_format=ROW、GTID_MODE=ON (推薦)。

操作步驟

  1. 低峰期全量導出 (凌晨):
    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,便於後續增量起點清晰。
  2. 全量導入實例 B:
    mysql -hB -uroot -p < /backup/dn2_dn7_full_$(date +%F).sql
  3. 停寫切換窗口 (業務中斷開始):
    • 停止 MyCat (或應用層雙寫切換開關)。
    • 停止實例 A 上對應分片的寫入 (可設 read_only=ON 或刪除路由)。
  4. 增量追趕:
    # 表級行數對比
    SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA IN ('dn2','dn7');
    # 或使用 pt-table-checksum (推薦)
  5. 切換生效:
    • 替換 MyCat 配置,啟動 MyCat。
    • 驗證應用讀寫正常。

中斷時間分析

主要耗時 = 增量 Binlog 回放時間。典型 2 個分片、增量 < 1GB,回放 1~3 分鐘。總中斷可控在 5 分鐘內。

方案二:級聯主從切換 (極致低中斷,適合高可用架構)

架構前置

  • 實例 A 上 dn2、dn7 各自掛級聯從庫:dn2 -> dn2_slave (實例 B)、dn7 -> dn7_slave (實例 B)。
  • 級聯從庫配置 log_slave_updates=ON、read_only=ON。
  • 同步延遲監控 Seconds_Behind_Master=0 持續數天。

操作步驟

  1. 低峰期停止 MyCat (中斷開始)。
  2. 主從切換 (MHA / Orchestrator / 手動):
    • 停止主庫寫入 (read_only=ON)。
    • 等待從庫應用完所有 Relay Log (SHOW SLAVE STATUS\G 顯示 Slave_SQL_Running_State: Slave has read all relay log)。
    • 提升從庫為新主 (STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=OFF;)。
  3. 處理切換瞬間的 Binlog 殘留 (極少量):mysqlbinlog 解析舊主新增 Binlog → 新主重放。
  4. pt-table-checksum 快速校驗新主舊主數據一致性。
  5. 替換 MyCat 配置指向新主,啟動 MyCat (中斷結束)。

中斷時間分析

主從切換通常 < 30 秒,校驗 1~2 分鐘,**總中斷可壓縮至 2~3 分鐘**。但前置成本高:需長期維護級聯從庫、監控延遲、佔用實例 B 資源。

方案對比與選型建議

維度方案一:Dump+Binlog方案二:級聯切換
前置資源成本低 (臨時佔用備份空間)高 (長期佔用實例 B 存儲/CPU/IO)
業務中斷時間3~5 分鐘2~3 分鐘
操作複雜度中 (標準化腳本可自動化)高 (需成熟主從切換工具鏈)
風險點Binlog 位點對齊錯誤、大事務回放慢切換瞬間數據衝突、從庫數據偏差
適用場景通用、無現成高可用體系、分片數較少已有 MHA/Orchestrator、極度敏感中斷時間、分片多

通用最佳實踐清單

  • 雙寫驗證期:切換前 1 週開啟應用雙寫 (寫舊分片、同步寫新分片),對比讀取結果,發現 Bug 提前修復。
  • 回滾預案:保留舊分片 read_only=ON 觀察 24~48h,確認無異常再物理下線。
  • 監控覆蓋:遷移全程監控 Seconds_Behind_Master、Binlog_apply_latency、應用錯誤率、QPS 突變。
  • 文檔留痕:記錄每步命令、時間戳、負責人、校驗結果,納入變更管理系統。

總結

MyCat 分片遷移的核心是「全量基準 + 增量追趕 + 原子切換」。方案一通用性強、門檻低,適合大多數團隊;方案二極致壓縮中斷,適合擁有成熟高可用體系的大廠。無論選哪套,**校驗一致性 (pt-table-checksum) + 觀察期保留舊分片** 是防止數據丟失的最後防線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved