5分鍾搞定 MySQL 到 MySQL "異構"數據在線遷移同步


簡述

MySQL 到 MySQL 在線同步不是一個新鮮話題了,但是面對數據源異構、高度產品化創建、並且穩定運行於在線嚴苛場景,需要做的工作會比一個單純工具或者腳本多得多。本篇文章僅從功能角度介紹 CloudCanal 如何快速創建並運行此種數據鏈路。

技術點

"異構" 和面臨的問題

通常所說的數據庫異構在於三個維度,相互可以組合,包括 兩端數據庫類型不同表結構約束不一致數據差異。后兩者工作更多在於傳統 ETL 領域的 Transform 范疇,在如今大數據 ODS 構建過程中被弱化(所謂 ELT),但是在在線業務領域仍然存在較多嚴苛需求(Streaming)。而前者對系統的架構和核心數據結構設計有諸多要求,這些要求來自於 增量數據獲取方式多樣SQL 方言差異約束差異元數據差異部署形態(如分布式)等問題的處理。

增量數據獲取方式 如 ORACLE 的 redo 日志、物化視圖,MySQL binlog 、Postgres WAL、MongoDB oplog等千差萬別,如何快速增加源端數據庫支持需要系統級設計和抽象,也是一個比較漫長的過程。

SQL 方言差異 如 RDB 分頁差異(數據掃描)、寫入沖突處理、大小寫、表結構定義差異等。約束差異 如索引 owner 歸屬偏差、partition key/sharding key 和 PK/UK 的關系差異(如 GreenPlum 對唯一鍵的要求) 等。上述兩個差異,對於純粹數據遷移、同步影響較小,但是對於 DDL 同步、結構遷移存在巨大挑戰(如 MySQL 到 Greenplum 需要對索引重命名、裁剪和 partition key 無關的 UK 等),在庫、表、列映射、裁剪等情況下,更加復雜。

元數據差異 包括數據類型轉換、db/schema/table/topic/tablespace/index(ES) 層次差異、partition key / sharding key 等結構支持、分布式數據庫分片差異(如 MongoDB shard/replication set 結構和分布式數據庫中間件 shard 的遷移同步架構統一),以及 big evil 以分布式數據中間件為源端的 DDL 同步。

但是今天,我們並不展開介紹 數據庫類型不同 的數據遷移同步功能,而是介紹 MySQL 到 MySQL 在線數據遷移同步所面臨的異構問題,更多是業務需求所產生的 表結構不一致數據差異 ,其中包括庫、表、列映射、裁剪 和 數據過濾。希望此篇文章能夠讓你在 5 分鍾內搞定這個事情(環境 ready 的情況下)。

舉個"栗子"

准備 CloudCanal

SAAS 版參考 自建機器客戶端安裝 文章

社區版參考文章 docker安裝 文章

數據庫准備

我們有3個 MySQL 數據庫,源實例上的庫叫 drds_1drds_2 ,目標實例上有 drds_merge 庫, 其中源庫里面有若干張表,並且存在一些測試數據,有些表正常遷移(worker_stats表), 有些表需要匯聚(shard_x表),有些表需要結構遷移(kbs_question),有些表有映射(shard_x表),有些表不同步(kbs_article表),有些表字段需要映射和裁剪(data_job)。接下來我們花 5 分鍾時間來搞定這個事情,並且做一次數據校驗。

造些數據

  • 啟動源端造增量數據程序,IUD 比例 30:50:20

img

創建任務

  • 選擇源數據庫和目標數據庫,做好庫映射。操作完畢點擊下一步。

img

  • 選擇數據同步,並默認勾選數據初始化、DDL 同步,此處勾選做一次性數據校驗,在主任務增量追上階段,自動進行數據校驗。當然我們也可以隨時隨地創建單獨的數據校驗任務。操作完畢點擊下一步。

img

  • 選擇表,並做好表映射,以及去除不想遷移同步的表。操作完畢點擊下一步。

img

  • 選擇列,並做好列映射、裁剪掉某些不需要表的列。

img

  • 批量設置唯一鍵為主鍵。

img

  • 設置數據過濾,如圖中 id < 3000。操作完畢點擊下一步。

img

  • 確認創建任務。確認完畢點擊創建任務。
    img

任務運行

  • 如果選擇的庫、表、列在對端不存在,則進行結構遷移

  • 結構遷移完成后自動進行數據初始化,映射、裁剪、數據過濾按照設定運行。目前 CloudCanal 數據初始化都是邏輯初始化,速度可能沒有某些物理初始化快,但是靈活度高。

  • 數據初始化完畢,開始進行增量同步。增量同步會自動從數據初始化位點拉取 MySQL binlog 進行回放,同樣會執行映射、裁剪、以及數據過濾等操作。
    img

數據校驗

  • 按相同邏輯創建一個增量任務。(暫未推出創建相似任務)

  • 校驗任務跑完,獲取差異數據,並抽樣對比,數據一致。校驗的差異主要是數據多次更新、同步延遲等造成,一般非大規模不一致或丟失,則數據正常。

  • 數據差異數據目前需要到任務日志目錄獲取,暫時未提供日志下載能力。
    img

總結

異構數據源的在線遷移和同步,此篇文章主要簡單介紹了下功能,對於在線嚴苛場景而言,后續的監控告警、容災、特殊數據處理、抗峰值、問題排查等都是重要工作。

在文末,貼一下我們社區版下載帖,歡迎下載並嘗試我們的產品,快來構建屬於你自己的在線數據任務吧。
CloudCanal-免費好用的企業級數據同步工具,歡迎品鑒。
了解產品可以查看官方網站: http://www.clougence.com
CloudCanal社區:https://www.askcug.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM