1 需求概述
將MySQL5.6生產(chǎn)庫(kù)多張表的數(shù)據(jù)實(shí)時(shí)同步到Oracle11g數(shù)據(jù)倉(cāng)庫(kù),MySQL歷史數(shù)據(jù)700G,平均每天產(chǎn)生50G左右日志文件,MySQL日志空間50G,超過(guò)后滾動(dòng)刪除日志文件。整個(gè)同步過(guò)程不可影響MySQL業(yè)務(wù)操作。
2 技術(shù)原理
采用靈蜂數(shù)據(jù)集成軟件BeeDI將MySQL數(shù)據(jù)實(shí)時(shí)同步到Oracle,通過(guò)ETL全量同步歷史數(shù)據(jù),通過(guò)日志解析方式實(shí)時(shí)同步增量數(shù)據(jù)。
受限于日志空間,如果將所有歷史數(shù)據(jù)一次性同步,需要的時(shí)間會(huì)超過(guò)一天,全量同步過(guò)程產(chǎn)生的日志會(huì)被刪除,造成實(shí)時(shí)日志解析任務(wù)數(shù)據(jù)缺失,所以需要分批同步歷史數(shù)據(jù),基本操作如下:
a 全量同步部分表。
b 在實(shí)時(shí)日志解析任務(wù)中添加已全量同步完成的表并啟動(dòng)任務(wù),當(dāng)MySQL和Oracle兩端對(duì)應(yīng)表數(shù)據(jù)一致時(shí),停止日志解析任務(wù)。
重復(fù)上面a和b步驟,直到所有表都加入實(shí)時(shí)日志解析任務(wù)。
3 MySQL環(huán)境配置
3.1 創(chuàng)建用戶
在主庫(kù)創(chuàng)建同步用戶,以用戶sync為例,創(chuàng)建用戶及權(quán)限分配語(yǔ)句如下:
CREATE USER 'sync'@'%' IDENTIFIED BY 'xxxxx';
GRANT SELECT,PROCESS,SUPER, REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'sync'@'%';
3.2 啟用BinLog
查詢主庫(kù)日志開(kāi)啟狀態(tài)及日志記錄格式:
show variables like 'log_bin';
show variables like "%binlog_format%";

如果日志狀態(tài)為OFF或日志記錄格式不為ROW,則編輯my.ini文件,設(shè)置以下項(xiàng)目?jī)?nèi)容:
log-bin="xxxxxx" --開(kāi)啟日志
binlog_format="ROW" --日志記錄格式
4 BeeDI同步操作
4.1 配置全量同步任務(wù)
在BeeDI中新建ETL作業(yè),在【ETL模板屬性】對(duì)話框的【映射屬性】中設(shè)置【LOB裝載】為綁定存儲(chǔ)。
【LOB裝載】用于指定Oracle LOB數(shù)據(jù)載入方式,定位存儲(chǔ)通過(guò)定位LOB指針更新LOB內(nèi)容,綁定存儲(chǔ)通過(guò)參數(shù)綁定方式更新LOB內(nèi)容。

為優(yōu)化數(shù)據(jù)抽取性能,建議在抽取組件的【選項(xiàng)】對(duì)話框中設(shè)置【異步】抽取模式。

為優(yōu)化數(shù)據(jù)加載性能,建議在裝載組件的【選項(xiàng)】對(duì)話框中選擇【批量】裝載模式。

全量同步任務(wù)配置完成如下

按照以上方式,創(chuàng)建多個(gè)ETL作業(yè),其中每個(gè)ETL作業(yè)對(duì)應(yīng)一張同步表。
4.2 配置實(shí)時(shí)日志解析任務(wù)
實(shí)時(shí)解析任務(wù)使用一個(gè)腳本作業(yè),在其中指定所有要同步的表,腳本代碼如下




4.3 執(zhí)行全量同步任務(wù)
選中要執(zhí)行的全量同步作業(yè),點(diǎn)擊工具欄【啟動(dòng)】按鈕,可以同時(shí)啟動(dòng)多個(gè)全量同步作業(yè),只要生產(chǎn)庫(kù)資源及BeeDI所在機(jī)器資源充足。
4.4 執(zhí)行實(shí)時(shí)日志解析任務(wù)
當(dāng)所有全量同步作業(yè)運(yùn)行結(jié)束后,編輯實(shí)時(shí)任務(wù)腳本,在變量cdc_tables中指定已經(jīng)全量同步完成的表;在inquireLog函數(shù)參數(shù)中設(shè)置日志捕獲起始點(diǎn),可將最先運(yùn)行的全量同步作業(yè)的啟動(dòng)時(shí)間指定為日志捕獲起始點(diǎn),日志捕獲點(diǎn)只需在任務(wù)初次執(zhí)行時(shí)設(shè)置一次,以后任務(wù)運(yùn)行將自動(dòng)管理日志捕獲點(diǎn)。
在【調(diào)度窗口】通過(guò)快捷菜單【添加】把將要執(zhí)行的實(shí)時(shí)日志解析作業(yè)載入,選中調(diào)度窗口的實(shí)時(shí)作業(yè),點(diǎn)擊工具欄【定時(shí)】按鈕,設(shè)置按秒定時(shí),運(yùn)行周期1秒。

實(shí)時(shí)任務(wù)運(yùn)行后,在日志窗口輸出MySQL數(shù)據(jù)庫(kù)日志解析信息,包含每分鐘讀取的日志記錄,最近解析日志時(shí)間點(diǎn)。

4.5 添加更多同步表
當(dāng)實(shí)時(shí)任務(wù)對(duì)應(yīng)的作業(yè)狀態(tài)頻繁出現(xiàn)定時(shí)圖標(biāo)時(shí),表明任務(wù)進(jìn)入實(shí)時(shí)狀態(tài),此時(shí)MySQL源表和Oracle目標(biāo)表數(shù)據(jù)一致,停止實(shí)時(shí)日志解析任務(wù),配置運(yùn)行其它表的全量同步任務(wù)(參考4.1和4.3)。當(dāng)全量任務(wù)結(jié)束后,編輯實(shí)時(shí)日志解析任務(wù),增加已全量同步完成的其他表,啟動(dòng)實(shí)時(shí)任務(wù)(參考4.2和4.4)。

5 效驗(yàn)同步數(shù)據(jù)一致性
依次在源庫(kù)和目標(biāo)庫(kù)執(zhí)行 select count(*) from [表] 比較表記錄數(shù)是否相等。
依次在源庫(kù)和目標(biāo)庫(kù)執(zhí)行 select sum([數(shù)值列]) from [表] 比較指定字段算術(shù)和是否相等。


到此這篇關(guān)于詳解MySQL實(shí)時(shí)同步到Oracle解決方案的文章就介紹到這了,更多相關(guān)MySQL實(shí)時(shí)同步到Oracle內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 詳解Mysql和Oracle之間的誤區(qū)
- SpringBoot多數(shù)據(jù)庫(kù)連接(mysql+oracle)的實(shí)現(xiàn)
- MySQL版oracle下scott用戶建表語(yǔ)句實(shí)例
- mysql、oracle默認(rèn)事務(wù)隔離級(jí)別的說(shuō)明
- MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對(duì)應(yīng)關(guān)系說(shuō)明
- mysql和oracle的區(qū)別小結(jié)(功能性能、選擇、使用它們時(shí)的sql等對(duì)比)
- mysql類似oracle rownum寫(xiě)法實(shí)例詳解
- 淺談Mysql、SqlServer、Oracle三大數(shù)據(jù)庫(kù)的區(qū)別
- Oracle更換為MySQL遇到的問(wèn)題及解決