目錄
1 需求概述
2 技術原理
3 MySQL環境配置
3.1 創建用戶
3.2 啟用BinLog
4 BeeDI同步操作
4.1 配置全量同步任務
4.2 配置實時日志決議任務
4.3 執行全量同步任務
4.4 執行實時日志決議任務
4.5 添加更多同步表
5 效驗同步資料一致性
1 需求概述
將MySQL5.6生產庫多張表的資料實時同步到Oracle11g資料倉庫,MySQL歷史資料700G,平均每天產生50G左右日志檔案,MySQL日志空間50G,超過后滾動洗掉日志檔案,整個同步程序不可影響MySQL業務操作,
2 技術原理
采用靈蜂資料集成軟體BeeDI將MySQL資料實時同步到Oracle,通過ETL全量同步歷史資料,通過日志決議方式實時同步增量資料,
受限于日志空間,如果將所有歷史資料一次性同步,需要的時間會超過一天,全量同步程序產生的日志會被洗掉,造成實時日志決議任務資料缺失,所以需要分批同步歷史資料,基本操作如下:
a 全量同步部分表,
b 在實時日志決議任務中添加已全量同步完成的表并啟動任務,當MySQL和Oracle兩端對應表資料一致時,停止日志決議任務,
重復上面a和b步驟,直到所有表都加入實時日志決議任務,
3 MySQL環境配置
3.1 創建用戶
在主庫創建同步用戶,以用戶sync為例,創建用戶及權限分配陳述句如下:
CREATE USER 'sync'@'%' IDENTIFIED BY 'xxxxx';
GRANT SELECT,PROCESS,SUPER, REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'sync'@'%';
3.2 啟用BinLog
查詢主庫日志開啟狀態及日志記錄格式:
show variables like 'log_bin';
show variables like "%binlog_format%";
如果日志狀態為OFF或日志記錄格式不為ROW,則編輯my.ini檔案,設定以下專案內容:
log-bin="xxxxxx" --開啟日志
binlog_format="ROW" --日志記錄格式
4 BeeDI同步操作
4.1 配置全量同步任務
在BeeDI中新建ETL作業,在【ETL模板屬性】對話框的【映射屬性】中設定【LOB裝載】為系結存盤,【查詢分頁】指定100000,
【LOB裝載】用于指定Oracle LOB資料載入方式,定位存盤通過定位LOB指標更新LOB內容,系結存盤通過引數系結方式更新LOB內容,
【查詢分頁】用于指定查詢MySQL時的分頁記錄數,

為優化資料抽取性能,建議在抽取組件的【選項】對話框中設定增量抽取,指定【時間戳】增量模式,其中時間戳選擇表主鍵,
如果不指定時間戳,對于MySQL大表將采用分頁方式讀取,性能較低,

為優化資料加載性能,建議在裝載組件的【選項】對話框中選擇并行裝載模式,

全量同步任務配置完成如下

按照以上方式,創建多個ETL作業,其中每個ETL作業對應一張同步表,
4.2 配置實時日志決議任務
實時決議任務使用一個腳本作業,在其中指定所有要同步的表,腳本代碼如下




4.3 執行全量同步任務
選中要執行的全量同步作業,點擊工具列【啟動】按鈕,可以同時啟動多個全量同步作業,只要生產庫資源及BeeDI所在機器資源充足,
4.4 執行實時日志決議任務
當所有全量同步作業運行結束后,編輯實時任務腳本,在變數cdc_tables中指定已經全量同步完成的表;在inquireLog函式引數中設定日志捕獲起始點,可將最先運行的全量同步作業的啟動時間指定為日志捕獲起始點,日志捕獲點只需在任務初次執行時設定一次,以后任務運行將自動管理日志捕獲點,
在【調度視窗】通過快捷選單【添加】把將要執行的實時日志決議作業載入,選中調度視窗的實時作業,點擊工具列【定時】按鈕,設定按秒定時,運行周期1秒,

實時任務運行后,在日志視窗輸出MySQL資料庫日志決議資訊,包含每分鐘讀取的日志記錄,最近決議日志時間點,

4.5 添加更多同步表
當實時任務對應的作業狀態頻繁出現定時圖示時,表明任務進入實時狀態,此時MySQL源表和Oracle目標表資料一致,停止實時日志決議任務,配置運行其它表的全量同步任務(參考4.1和4.3),當全量任務結束后,編輯實時日志決議任務,增加已全量同步完成的其他表,啟動實時任務(參考4.2和4.4),

5 效驗同步資料一致性
依次在源庫和目標庫執行 select count(*) from [表] 比較表記錄數是否相等,
依次在源庫和目標庫執行 select sum([數值列]) from [表] 比較指定欄位算術和是否相等,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260376.html
標籤:其他
