詳解MySQL實時同步到Oracle解決方案
1 需求概述
將MySQL5.6生產庫多張表的數據實時同步到Oracle11g數據倉庫,MySQL歷史數據700G,平均每天產生50G左右日志文件,MySQL日志空間50G,超過后滾動刪除日志文件。整個同步過程不可影響MySQL業(yè)務操作。
2 技術原理
采用靈蜂數據集成軟件BeeDI將MySQL數據實時同步到Oracle,通過ETL全量同步歷史數據,通過日志解析方式實時同步增量數據。
受限于日志空間,如果將所有歷史數據一次性同步,需要的時間會超過一天,全量同步過程產生的日志會被刪除,造成實時日志解析任務數據缺失,所以需要分批同步歷史數據,基本操作如下:
a 全量同步部分表。
b 在實時日志解析任務中添加已全量同步完成的表并啟動任務,當MySQL和Oracle兩端對應表數據一致時,停止日志解析任務。
重復上面a和b步驟,直到所有表都加入實時日志解析任務。
3 MySQL環(huán)境配置
3.1 創(chuàng)建用戶
在主庫創(chuàng)建同步用戶,以用戶sync為例,創(chuàng)建用戶及權限分配語句如下:
CREATE USER 'sync'@'%' IDENTIFIED BY 'xxxxx'; GRANT SELECT,PROCESS,SUPER, REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'sync'@'%';
3.2 啟用BinLog
查詢主庫日志開啟狀態(tài)及日志記錄格式:
show variables like 'log_bin'; show variables like "%binlog_format%";
如果日志狀態(tài)為OFF或日志記錄格式不為ROW,則編輯my.ini文件,設置以下項目內容:
log-bin="xxxxxx" --開啟日志
binlog_format="ROW" --日志記錄格式
4 BeeDI同步操作
4.1 配置全量同步任務
在BeeDI中新建ETL作業(yè),在【ETL模板屬性】對話框的【映射屬性】中設置【LOB裝載】為綁定存儲。
【LOB裝載】用于指定Oracle LOB數據載入方式,定位存儲通過定位LOB指針更新LOB內容,綁定存儲通過參數綁定方式更新LOB內容。
為優(yōu)化數據抽取性能,建議在抽取組件的【選項】對話框中設置【異步】抽取模式。
為優(yōu)化數據加載性能,建議在裝載組件的【選項】對話框中選擇【批量】裝載模式。
全量同步任務配置完成如下
按照以上方式,創(chuàng)建多個ETL作業(yè),其中每個ETL作業(yè)對應一張同步表。
4.2 配置實時日志解析任務
實時解析任務使用一個腳本作業(yè),在其中指定所有要同步的表,腳本代碼如下
4.3 執(zhí)行全量同步任務
選中要執(zhí)行的全量同步作業(yè),點擊工具欄【啟動】按鈕,可以同時啟動多個全量同步作業(yè),只要生產庫資源及BeeDI所在機器資源充足。
4.4 執(zhí)行實時日志解析任務
當所有全量同步作業(yè)運行結束后,編輯實時任務腳本,在變量cdc_tables中指定已經全量同步完成的表;在inquireLog函數參數中設置日志捕獲起始點,可將最先運行的全量同步作業(yè)的啟動時間指定為日志捕獲起始點,日志捕獲點只需在任務初次執(zhí)行時設置一次,以后任務運行將自動管理日志捕獲點。
在【調度窗口】通過快捷菜單【添加】把將要執(zhí)行的實時日志解析作業(yè)載入,選中調度窗口的實時作業(yè),點擊工具欄【定時】按鈕,設置按秒定時,運行周期1秒。
實時任務運行后,在日志窗口輸出MySQL數據庫日志解析信息,包含每分鐘讀取的日志記錄,最近解析日志時間點。
4.5 添加更多同步表
當實時任務對應的作業(yè)狀態(tài)頻繁出現(xiàn)定時圖標時,表明任務進入實時狀態(tài),此時MySQL源表和Oracle目標表數據一致,停止實時日志解析任務,配置運行其它表的全量同步任務(參考4.1和4.3)。當全量任務結束后,編輯實時日志解析任務,增加已全量同步完成的其他表,啟動實時任務(參考4.2和4.4)。
5 效驗同步數據一致性
依次在源庫和目標庫執(zhí)行 select count(*) from [表] 比較表記錄數是否相等。
依次在源庫和目標庫執(zhí)行 select sum([數值列]) from [表] 比較指定字段算術和是否相等。
到此這篇關于詳解MySQL實時同步到Oracle解決方案的文章就介紹到這了,更多相關MySQL實時同步到Oracle內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
快速解決MySQL服務無法啟動顯示:系統(tǒng)出錯,發(fā)生系統(tǒng)錯誤1067, 進程意外終止的兩種方法
本人因為phpstudy的MySQL數據庫與我的電腦上的MySQL數據庫發(fā)生沖突,當我將MySQL服務器的服務名從MySQL改為MySQL5后,啟動MySQL5服務后就報錯:系統(tǒng)出錯, 發(fā)生系統(tǒng)錯誤 1067, 進程意外終止,現(xiàn)在將這個解決方法分享給大家,需要的朋友可以參考下2024-06-06