1. 程式人生 > >阿里巴巴去Oracle資料遷移同步工具(全量+增量,目標支援MySQL/DRDS)

阿里巴巴去Oracle資料遷移同步工具(全量+增量,目標支援MySQL/DRDS)

摘要: 阿里資料庫遷移專案yugong開源啦!yugong解決了單機Oracle無法滿足的擴充套件性問題,當時也掀起一股去IOE專案的浪潮,愚公這專案因此而誕生,其要解決的目標就是幫助使用者完成從Oracle資料遷移到MySQL上,完成去IOE的第一步。DBA的小夥伴們趕快來圍觀!

專案簡介

yugong(意譯:愚公)專案是阿里的開源專案,該專案使用純Java開發,主要作用是進行資料庫遷移,目前該專案主要支援從oracle資料庫向Mysql和DRDS資料庫進行遷移。

專案背景

08年左右,阿里巴巴開始嘗試MySQL的相關研究,並開發了基於MySQL分庫分表技術的相關產品,Cobar/TDDL(目前為阿里雲DRDS產品),解決了單機Oracle無法滿足的擴充套件性問題,當時也掀起一股去IOE專案的浪潮,愚公這專案因此而誕生,其要解決的目標就是幫助使用者完成從Oracle資料遷移到MySQL上,完成去IOE的第一步。

專案介紹

架構

d2cc2ddbc6569788e30a0e71bdf709011560fdb9

1. 一個Jvm Container對應多個instance,每個instance對應於一張表的遷移任務

2. instance分為三部分

a. extractor (從源資料庫上提取資料,可分為全量/增量實現)

b. translator (將源庫上的資料按照目標庫的需求進行自定義轉化)

c. applier (將資料更新到目標庫,可分為全量/增量/對比的實現)


yugong架構特點

1.全量+增量任務 (減少複雜度)

2.JDBC協議 (解決環境相容性)

3.oracle物化檢視 (解決記錄增量日誌)

4.引入translator擴充套件 (解決異構資料轉化)


yugong支援的功能


同構功能支援:

1.Oracle -> Mysql

2.Oracle -> Oracle

異構功能支援:

1. 編碼不同

2. 庫名/表名不同

3. 欄位名字不同

4. 欄位型別不同欄位個數不同(多幾個,少幾個)

yugong的資料遷移流程

整個資料遷移過程主要分為全量遷移增量遷移兩個部分。


575cb5340efb30bab3746bf86ca3bb1f7b32b2c9

遷移的大致過程如下:

1.增量資料收集 (建立oracle表的增量物化檢視)

2.進行全量複製

3.進行增量複製 (可並行進行資料校驗)

4.原庫停寫,切到新庫


回滾方案:開啟新庫到老庫的資料迴流

Yugong的使用限制

1.資料庫許可權 基本CRUD,物化檢視操作等

2.增量同步不支援主鍵變更

3.需要先delete,後insert 源和目標型別不相容時需要自定義轉換邏輯源庫為number,目標庫varchar不支援, 目標為int/decimal可自動處理

4.增量同步對oracle庫壓力 物化檢視和回表查詢都會對源庫產生比較大的影響


資料遷移方案設計

全量方案

業界常用的全量方案有:

1.資料檔案匯入/匯出,比如EXPDP/IMPDP, mysqldump/source, xtrabackup等

2.ETL資料匯入/匯出,主要原理為使用JDBC資料查詢介面

yugong在專案設計之初考慮去IOE資料遷移的靈活性和自定義能力,最終選擇的方案為基於JDBC介面遍歷資料.

相比於資料檔案匯入/匯出,其優點

  • 靈活資料同步
  • 支援異構資料
  • 實現相對簡單

缺點:

  • 全量拉取需要配合增量使用,會有部分資料重複同步
  • 效能和影響,一次性全量拉取,如果持續時間過長,如果此時資料庫變更過多,會導致segment過大

增量方案

業界常用的增量方案有:

1.基於時間戳定時dump

2.oracle日誌檔案,比如LogMinerOGG

3.oracle CDC(Change Data Capture)

4.oracle trigger機制,比如DataBus , SymmetricDS

5.oracle 物化檢視(materialized view)

6.當然還有很多...

yugong在專案設計之初考慮IOE資料遷移的靈活性,支援多種oracle版本,同時為降低DBA的運維成本,最終選擇oracle物化檢視作為我們的增量方案.

相比於其他,物化檢視方案其優點:

  • 原理簡單,方便理解和學習,使用者可以理解為一種固化的簡易trigger模式
  • 運維簡單,DBA一次賬戶授權後,程式可按需create一張物化視圖表即可完成增量訂閱
  • 相對透明,不需要像時間戳sql掃描依賴資料庫表設計,也不需要關注oracle版本和伺服器儲存等

缺點:

  • 效能和影響,類似於trigger機制會對源庫的資料寫入造成一定的效能影響.

使用環境

yugong的使用環境比較廣泛,yugong是採取純Java開發,有bat和shell指令碼,windows/linux均可執行。至於JDK,推薦使用1.6.25以上版本,穩定可靠,並且目前阿里巴巴也基本使用此版本。

資料庫

源庫為oracle,目標庫可為mysql/drds/oracle. 基於標準JDBC協議開發,對資料庫暫無版本要求,但需要的資料庫賬戶許可權。