楊明珉,陳 勇
(中國移動(深圳)有限公司,深圳 518048)
從新興的互聯(lián)網(wǎng)行業(yè)到其他的傳統(tǒng)行業(yè),使用開源的數(shù)據(jù)庫替代傳統(tǒng)商業(yè)數(shù)據(jù)庫一直是IT系統(tǒng)建設(shè)的一個趨勢.以MySQL數(shù)據(jù)庫為代表的開源數(shù)據(jù)庫,在多種業(yè)務(wù)場景中已經(jīng)完成或者正在進(jìn)行對以O(shè)racle數(shù)據(jù)庫為代表的大型商用數(shù)據(jù)庫的替換.然而,在很多IT系統(tǒng)中,由于應(yīng)用程序的開發(fā)與數(shù)據(jù)庫的緊密關(guān)聯(lián),數(shù)據(jù)庫的更替涉及到大量的應(yīng)用程序改造和數(shù)據(jù)庫遷移,不可能做到一蹴而就.這將存在開源數(shù)據(jù)庫和原有商用數(shù)據(jù)庫在同一套IT系統(tǒng)中長期并存,數(shù)據(jù)相互耦合的情況.其中,MySQL數(shù)據(jù)庫向Oracle數(shù)據(jù)庫做數(shù)據(jù)同步是最為常見的需求之一.異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)同步向來是IT系統(tǒng)工程實施的難點,而在核心IT系統(tǒng)中,MySQL數(shù)據(jù)庫往往以多節(jié)點高可用集群的方式部署,這又為其向Oracle數(shù)據(jù)庫做數(shù)據(jù)同步進(jìn)一步增加了難度.
本文采用在異構(gòu)數(shù)據(jù)庫同步中表現(xiàn)良好的Oracle GoldenGate作為MySQL數(shù)據(jù)庫到Oracle數(shù)據(jù)庫的數(shù)據(jù)同步工具,意在研究設(shè)計出一套行之有效的方案,實際解決從MySQL集群往以O(shè)racle為代表的異構(gòu)數(shù)據(jù)庫同步數(shù)據(jù)的難題.
MySQL集群架構(gòu)有多種實現(xiàn)方式,最為常見的包括基于主從復(fù)制、基于磁盤復(fù)制和基于網(wǎng)絡(luò)存儲引擎(ndb)的集群架構(gòu),其中目前使用最為廣泛的是基于主從復(fù)制的集群架構(gòu),也是本文論述的MySQL集群架構(gòu).
主從復(fù)制技術(shù)在MySQL 5.5版本被引入,可用于構(gòu)建MySQL高可用架構(gòu)方案,其原理是通過把主數(shù)據(jù)庫(以下簡稱主庫)記錄事務(wù)信息的二進(jìn)制日志傳遞和應(yīng)用到從數(shù)據(jù)庫(以下簡稱從庫),從而保證主庫和從庫的數(shù)據(jù)一致性.主從復(fù)制的實現(xiàn)總體上分為3步:
1) 主庫在完成每個事務(wù)的數(shù)據(jù)更新之前,首先將相應(yīng)的事務(wù)變更信息記錄到二進(jìn)制日志中,所有的事務(wù)變更信息是以串行的方式寫入二進(jìn)制日志.只有當(dāng)每個事務(wù)變更信息被成功寫入二進(jìn)制日志后,該事務(wù)的數(shù)據(jù)更新才能提交完成.
2) 從庫會開啟一個本地工作線程——I/O線程.I/O線程與主庫建立一個客戶端連接,主庫隨即啟動一個二進(jìn)制抽取線程,該線程從主庫的二進(jìn)制日志中依次讀取事務(wù)變更信息并發(fā)送給從庫的I/O線程,I/O線程將收到的事務(wù)變更信息存儲進(jìn)本地的中繼日志中.
3) 從庫啟動SQL線程,該線程依次讀取中繼日志中的事務(wù)變更信息并解析,然后在從庫中重做執(zhí)行這些事務(wù),完成與主庫相同的數(shù)據(jù)更新[1-4].
主從復(fù)制的架構(gòu)可以很靈活地實施,根據(jù)不同的需求場景,可以采用一主一從,一主多從,互為主從等架構(gòu).當(dāng)主庫發(fā)生故障時,從庫可以代替主庫接管業(yè)務(wù),成為新的主庫,并繼續(xù)向其他從庫進(jìn)行數(shù)據(jù)同步,從而最大程度保證數(shù)據(jù)一致性和服務(wù)高可用性.在主從復(fù)制的基礎(chǔ)之上部署一套主從復(fù)制的自動化管理程序,即可組建一套MySQL高可用集群[5,6].
本文介紹的MySQL集群采用的是一主多從架構(gòu),即集群中一個節(jié)點用作主庫,其他多個從節(jié)點用作從庫.集群管理程序是基于開源的MHA(Master High Availability)集群軟件改進(jìn)而成,可以實現(xiàn)主從復(fù)制狀態(tài)的實時監(jiān)控,秒級故障自動切換和自動主從提升等功能.
圖1 MySQL主從復(fù)制架構(gòu)示意圖
GoldenGate,即Oracle GoldenGate Transactional Data Management,是一種基于日志的數(shù)據(jù)同步軟件.GoldenGate從源數(shù)據(jù)庫讀取并解析在線日志或歸檔日志,捕捉到數(shù)據(jù)變化,再將這些數(shù)據(jù)變化投遞到目標(biāo)端,在目標(biāo)端將數(shù)據(jù)變化重新解析為SQL語句并應(yīng)用到數(shù)據(jù)庫,從而完成源數(shù)據(jù)庫到目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)同步.
GoldenGate的核心進(jìn)程包括:抽取進(jìn)程、復(fù)制進(jìn)程和管理進(jìn)程.
1) 抽取進(jìn)程(Extract)
抽取進(jìn)程運行在源端,負(fù)責(zé)從源數(shù)據(jù)庫的源數(shù)據(jù)表和日志中抽取數(shù)據(jù)和數(shù)據(jù)變化,用于目標(biāo)數(shù)據(jù)庫的初始數(shù)據(jù)裝載和變化數(shù)據(jù)的同步.
需要同步數(shù)據(jù)的對象寫在配置文件中,抽取進(jìn)程讀取配置文件獲取同步的對象,對這些對象進(jìn)行的DML (Data Manipulation Language)和DDL (Data Define Language)操作,都被抽取進(jìn)程從日志中捕獲,并將其中完成提交的事務(wù)輸出到Trail文件中以傳送到目標(biāo)端.抽取進(jìn)程周期性地完成檢查點(checkpoint),記錄其完成捕獲的日志位置,可以進(jìn)行斷點續(xù)傳,保證數(shù)據(jù)同步的完整性.
2) 復(fù)制進(jìn)程(Replicat)
復(fù)制進(jìn)程在目標(biāo)端運行,該進(jìn)程讀取目標(biāo)端接收到的trail文件,并將文件內(nèi)容解析為可以執(zhí)行的SQL語句,然后在目標(biāo)數(shù)據(jù)庫中執(zhí)行這些SQL語句.與Extract進(jìn)程一樣,復(fù)制進(jìn)程也是使用內(nèi)部的檢查點(checkpoint)機(jī)制來保證進(jìn)程意外中斷后,可以從中斷的位置重新啟動恢復(fù),從而避免數(shù)據(jù)丟失的風(fēng)險.
3) 管理進(jìn)程 (MGR)
在GoldenGate的源端和目標(biāo)端分別有一個控制進(jìn)程,稱為管理進(jìn)程.該進(jìn)程主要負(fù)責(zé)監(jiān)控GoldenGate的其他進(jìn)程狀態(tài),發(fā)現(xiàn)進(jìn)程異常,發(fā)送超時或閥值告警,報告進(jìn)程錯誤,為其他進(jìn)程分配存儲空間和重啟異常進(jìn)程等.
數(shù)據(jù)的變化信息存儲在trail文件中,目標(biāo)端的復(fù)制進(jìn)程通過讀取該文件來獲取需要應(yīng)用到目標(biāo)數(shù)據(jù)庫的SQL語句.從源端到目標(biāo)端的數(shù)據(jù)傳輸,大多情況下建議采用數(shù)據(jù)泵進(jìn)程.該進(jìn)程在數(shù)據(jù)庫源端啟動,負(fù)責(zé)把源端的trail文件以數(shù)據(jù)塊級別通過網(wǎng)絡(luò)傳輸?shù)侥繕?biāo)端.運行在目標(biāo)端的收集進(jìn)程(Collector)把從遠(yuǎn)端傳輸過來的數(shù)據(jù)進(jìn)行過濾,映射和轉(zhuǎn)換,重新生成目標(biāo)端的trail文件[7].
圖2 GoldenGate工作原理示意圖
圖3 GoldenGate關(guān)鍵進(jìn)程示意圖
GoldenGate支持幾乎所有主流操作系統(tǒng)和數(shù)據(jù)庫的異構(gòu)平臺之間的實時復(fù)制.此外,GoldenGate復(fù)制的拓?fù)浣Y(jié)構(gòu)非常靈活,除了支持一對一單向復(fù)制以外,還支持雙向復(fù)制、一對多復(fù)制、多對一復(fù)制、多級復(fù)制等.因此,GoldenGate可以應(yīng)用于系統(tǒng)的應(yīng)急容災(zāi)、業(yè)務(wù)雙中心、數(shù)據(jù)庫備份、數(shù)據(jù)庫遷移、數(shù)據(jù)搬遷、異構(gòu)數(shù)據(jù)庫數(shù)據(jù)同步等多種應(yīng)用場景[8,9].
在使用GoldenGate從MySQL到Oracle的異構(gòu)數(shù)據(jù)同步架構(gòu)中,MySQL數(shù)據(jù)庫作為復(fù)制的源端,Oracle數(shù)據(jù)庫作為復(fù)制的目標(biāo)端,整個復(fù)制過程涉及3個環(huán)節(jié):
1) GoldenGate的抽取進(jìn)程從源端MySQL數(shù)據(jù)庫的二進(jìn)制日志中抽取事務(wù)日志.
2) 抽取的事務(wù)日志通過網(wǎng)絡(luò)傳輸?shù)侥繕?biāo)端Oracle數(shù)據(jù)庫.
3) GoldenGate的復(fù)制進(jìn)程對接收到的事務(wù)日志進(jìn)行解析并在目標(biāo)端Oracle數(shù)據(jù)庫內(nèi)應(yīng)用.
在這三個環(huán)節(jié)中,環(huán)節(jié)2)事務(wù)日志的傳輸穩(wěn)定性主要依賴于網(wǎng)絡(luò)方案保障,本文不做論述.環(huán)節(jié)3)中由于GoldenGate與Oracle數(shù)據(jù)庫具有原生兼容性,搭配使用的方案非常成熟,不是架構(gòu)的難點,本文也不做論述.
此架構(gòu)的重點在于GoldenGate的抽取進(jìn)程如何從MySQL數(shù)據(jù)庫源端抽取事務(wù)日志.當(dāng)復(fù)制的源端MySQL數(shù)據(jù)庫為單節(jié)點時,GoldenGate的抽取進(jìn)程直接從二進(jìn)制日志中抽取事務(wù)日志即可.如果在源端的抽取進(jìn)程發(fā)生異常中斷,GoldenGate會記錄下事務(wù)中斷位置,事務(wù)中斷位置是一個二進(jìn)制日志文件號對應(yīng)的文件中所記錄的標(biāo)記該事務(wù)開始的位置號.當(dāng)源端的抽取進(jìn)程恢復(fù)時,GoldenGate會找到中斷時記錄的二進(jìn)制日志文件及該文件中的事務(wù)位置號,從這個位置繼續(xù)開始事務(wù)日志的抽取,從而保證不會有事務(wù)遺漏和事務(wù)被重復(fù)抽取的情況,這樣就能保證數(shù)據(jù)復(fù)制在事務(wù)日志抽取環(huán)節(jié)的完整性和一致性.但是復(fù)制源端的MySQL數(shù)據(jù)庫為多節(jié)點集群架構(gòu)時,MySQL集群的主庫是復(fù)制的源端,GoldenGate需要在主庫所在服務(wù)器上啟動,并從主庫的二進(jìn)制日志中進(jìn)行事務(wù)日志的抽取.當(dāng)集群發(fā)生切換的時候,原有的從庫之一接管主庫的業(yè)務(wù),成為新的主庫.此時,要保證業(yè)務(wù)數(shù)據(jù)繼續(xù)往Oracle數(shù)據(jù)庫做同步,就需要GoldenGate在新的主庫上繼續(xù)抽取二進(jìn)制日志,即GoldenGate的復(fù)制源端需要從MySQL集群的原主庫變?yōu)榧呵袚Q后的新主庫,且GoldenGate可以在新主庫上完成斷點續(xù)傳.這就需要在新主庫的二進(jìn)制日志中能夠準(zhǔn)確的找到抽取中斷的位置,確保從中斷的準(zhǔn)確位置開始抽取,而不會抽取的位置靠后造成事務(wù)遺漏或者抽取的位置靠前造成事務(wù)被重復(fù)抽取,因為無論事務(wù)遺漏還是事務(wù)重復(fù)都會造成最終的不一致.要確保做到這一點就會面臨以下兩個難點:
1) 需要GoldenGate能夠感知到MySQL集群發(fā)生的主從切換行為,且能夠在MySQL集群發(fā)生主從切換后即刻在原主庫上停止抽取進(jìn)程,然后在新主庫上啟動抽取進(jìn)程.
2) 在從新主庫的二進(jìn)制日志開始抽取事務(wù)日志之前,GoldenGate如何找到準(zhǔn)確的抽取起始位置.因為MySQL原主庫和新主庫的二進(jìn)制日志是兩套完全獨立的日志,沒有繼承性,在原主庫和新主庫中,記錄同一個事務(wù)的二進(jìn)制日志文件號和文件內(nèi)的事務(wù)position號完全不一樣.這會讓GoldenGate通過原主庫抽取中斷時記錄的二進(jìn)制日志文件號和事務(wù)position號,在新主庫的二進(jìn)制日志中確定準(zhǔn)確的抽取起始位置變得非常困難.
圖4 GoldenGate日志抽取源端切換示意圖
根據(jù)GoldenGate要能完成集群切換后即刻在新的主庫上啟動需求,本文設(shè)計了一套針對GoldenGate部署的共享存儲方案:
首先,在MySQL集群的各節(jié)點間部署一套共享存儲,該存儲與集群各節(jié)點服務(wù)器均相連,但該存儲上的文件系統(tǒng)同一時刻只能掛載在一臺服務(wù)器上,沒有掛載共享存儲的服務(wù)器不能對該存儲上的文件系統(tǒng)進(jìn)行讀寫.
然后,將GoldenGate的應(yīng)用程序安裝部署在共享存儲的文件系統(tǒng)上,GoldenGate的啟動文件、配置文件和日志文件均放置在該文件系統(tǒng)上.這樣,只要掛載了該共享文件系統(tǒng)的服務(wù)器,就可以在其上啟動GoldenGate.
最后,要保證MySQL集群發(fā)生切換的時候,共享文件系統(tǒng)能夠從切換前的主庫服務(wù)器卸載下來,重新掛載到切換后的新主庫服務(wù)器上,這一系列共享文件系統(tǒng)的操作均可以通過開發(fā)切換控制程序來實現(xiàn).
這樣就實現(xiàn)了MySQL集群原主庫崩潰,新主庫接管業(yè)務(wù)后,GoldenGate能夠在新主庫上啟動并從新主庫捕捉數(shù)據(jù)變化繼續(xù)進(jìn)行同步.
圖5 GoldenGate共享存儲部署方案
本文在方案中引用了MySQL5.6的新特性—GTID(Global Transaction ID),來解決GoldenGate在新主庫服務(wù)器上啟動后,如何找到準(zhǔn)確抽取起始位置的難題.GTID是在MySQL集群中的一個全局編號,該編號對應(yīng)于一個已提交事務(wù),同一個事務(wù)在MySQL集群中所有節(jié)點對應(yīng)的GTID是完全一致的.這樣只要選擇MySQL 5.6以上的版本,在主從復(fù)制配置時開啟GTID功能,GTID就會顯式輸出到集群每個節(jié)點的二進(jìn)制日志中.那么在MySQL集群發(fā)生切換的時候,根據(jù)原主庫二進(jìn)制日志抽取停止點的GTID找到新主庫二進(jìn)制日志上對應(yīng)的GTID,就可以唯一定位到日志續(xù)傳的起始點.根據(jù)這個思路,只要對MySQL集群管理程序進(jìn)行改造,完成如下功能即可:
1) 根據(jù)GoldenGate輸出的原主庫的二進(jìn)制日志名稱和日志位置號找到對應(yīng)的GTID.
2) 根據(jù)GTID定位出新主庫對應(yīng)的二進(jìn)制日志名稱和日志位置號,并將定位結(jié)果輸出.
圖6 二進(jìn)制日志斷點位置定位流程
綜合以上設(shè)計思路,總體方案設(shè)計的關(guān)鍵點歸納如下:
1) 在集群各節(jié)點間部署共享存儲,將GoldenGate部署在共享存儲的文件系統(tǒng)上.
2) 開發(fā)GoldenGate切換控制程序,負(fù)責(zé)與GoldenGate的交互和共享存儲在集群各節(jié)點間的切換.
3) 開啟MySQL集群主從復(fù)制的GTID功能.
4) 改造MySQL集群管理程序,新增與GoldenGate切換控制程序的交互接口,能夠發(fā)送切換通知,并在接收到GoldenGate切換控制程序反饋的日志抽取停止點后,將切換后日志續(xù)傳起始點告知GoldenGate切換控制程序.
方案的總體工作流程設(shè)計如圖7.
當(dāng)由于某個觸發(fā)條件觸發(fā)MySQL集群開始切換時,MySQL集群管理程序同時出發(fā)GoldenGate日志抽取的切換流程:
1) MySQL集群管理程序向GoldenGate切換控制程序發(fā)出切換通知,并將切換目的地,即新主庫所在服務(wù)器的IP地址告訴GoldenGate切換控制程序.
2) GoldenGate切換控制程序?qū)⒉渴鹬鳪olden-Gate的共享存儲切換到新主庫所在服務(wù)器.
3) GoldenGate切換控制程序獲取GoldenGate抽取進(jìn)程在MySQL集群切換前所抽取到原主庫的最新的二進(jìn)制文件名和日志位置號.
4) GoldenGate切換控制程序把原主庫的二進(jìn)制文件名和日志位置號發(fā)送給MySQL集群管理程序,請求返回新主庫對應(yīng)的二進(jìn)制文件名和日志位置.
5) MySQL集群管理程序根據(jù)原主庫的二進(jìn)制文件名和日志位置號定位出新主庫對應(yīng)的二進(jìn)制文件名和日志位置,將定位結(jié)果發(fā)送給GoldenGate切換控制程序.
6) GoldenGate切換控制程序在新主庫所在服務(wù)器啟動GoldenGate,并指定GoldenGate切換控制程序從新主庫對應(yīng)的二進(jìn)制文件名和日志位置開始抽取日志.
圖7 方案總體流程設(shè)計
以上設(shè)計的同步方案的關(guān)鍵實現(xiàn)主要包括:
1) 對MySQL集群管理程序進(jìn)行改造,實現(xiàn)日志定位,即二進(jìn)制文件名、日志位置號與GTID的轉(zhuǎn)換功能.
2) 實現(xiàn)GoldenGate切換控制程序的切換控制和斷點續(xù)傳功能.
日志定位功能的核心實現(xiàn)思路是:
Step 1.通過傳入的二進(jìn)制日志文件路徑和位置號,查找出該二進(jìn)制日志文件中包含該位置號的事務(wù),再輸出在該事物之前完成復(fù)制的最新事務(wù)的GTID.
Step 2.根據(jù)Step 1獲取的GTID,遍歷新主庫的二進(jìn)制日志文件,查找出GTID所在的二進(jìn)制日志文件和對應(yīng)的已完成復(fù)制的事務(wù),再輸出該事務(wù)之后第一個未完成復(fù)制的事務(wù)對應(yīng)的位置號.
其中,Step 1代碼實現(xiàn)邏輯如下:
1) 讀取二進(jìn)制日志文件.
2) 讀取文件頭信息,根據(jù)輸入的位置號獲取前一事務(wù)的事件位置.
3) 解析前一事務(wù)的事件內(nèi)容,獲取該事務(wù)GTID的位置信息.
4) 從獲取的GTID位置信息獲取GTID字符串并輸出.
關(guān)鍵步驟代碼實現(xiàn)如下:
Step 2的代碼邏輯與實現(xiàn)與Step 1類似,在此不再做詳述.
GoldenGate切換控制程序主要實現(xiàn)的核心功能是,在接到 MySQL集群的切換通知后,完成GoldenGate的切換,關(guān)鍵步驟如下:
1) 判斷原主庫服務(wù)器是否宕機(jī).如果沒有宕機(jī),則在原主庫服務(wù)器上停止GoldenGate復(fù)制,然后觸發(fā)GoldenGate切換,如果已經(jīng)宕機(jī),則直接觸發(fā)GoldenGate切換.
2) 將部署著GoldenGate的共享存儲切換到新主庫所在服務(wù)器.
3) 通過MySQL集群將原主庫二進(jìn)制日志的位置轉(zhuǎn)換為新主庫二進(jìn)制日志的位置,并啟動GoldenGate從新主庫二進(jìn)制日志的位置開始抓取.
這兩個步驟實現(xiàn)的部分代碼如下:
1) 將原主庫的IP地址記錄到配置文件old_master_ip.conf中,在切換時需要先停止原主庫服務(wù)器上的GoldenGate的情況下需要使用.
2) 切換時判斷原主庫所在服務(wù)器是否已經(jīng)宕機(jī),如果已經(jīng)宕機(jī)不進(jìn)行停止GoldenGate操作,如果沒有宕機(jī),則進(jìn)行停止GoldenGate操作.
3) 把共享盤從原主庫服務(wù)器切換到新主庫服務(wù)器.
如果原主庫服務(wù)器沒有宕機(jī),需要先卸載共享盤:
在新主庫服務(wù)器上掛載共享盤:
4) 在新主庫上獲取原主庫停止同步時的二進(jìn)制日志位置,然后通過MySQL集群接口轉(zhuǎn)換,找到新主庫對應(yīng)的二進(jìn)制日志位置,GoldenGate從新的二進(jìn)制日志位置上啟動進(jìn)程進(jìn)行同步.
通過實際的部署使用,在MySQL集群發(fā)生主從切換的情況下,GoldenGate可以跟隨主庫的切換而自動進(jìn)行故障切換,完成抽取進(jìn)程與新主庫的自動對接,并能夠準(zhǔn)確定位斷點,復(fù)制的數(shù)據(jù)無重復(fù)無丟失,完美保障數(shù)據(jù)同步的連續(xù)性和一致性.
使用GoldenGate進(jìn)行MySQL數(shù)據(jù)庫和Oracle數(shù)據(jù)庫的異構(gòu)數(shù)據(jù)庫同步復(fù)制,是行業(yè)內(nèi)最常用和最成熟的方法.多數(shù)情況下主要是針對MySQL數(shù)據(jù)庫單實例和Oracle數(shù)據(jù)庫進(jìn)行同步,當(dāng)涉及MySQL集群環(huán)境和Oracle數(shù)據(jù)庫進(jìn)行同步的情況,主要有兩種部署方案:
(1) GoldenGate的抽取進(jìn)程部署在MySQL集群的主庫上.缺點是一旦主庫發(fā)生故障切換,GoldenGate的抽取進(jìn)程將無法繼續(xù)工作,需要人工介入處理.
(2) GoldenGate的抽取進(jìn)程部署在MySQL集群的從庫上.缺點是MySQL集群主庫和從庫數(shù)據(jù)存在一定的同步延遲,導(dǎo)致GoldenGate的抽取進(jìn)程抽取的數(shù)據(jù)也將與主庫存在一定的延遲.
本文介紹的實現(xiàn)方法是在第一種部署方案的基礎(chǔ)上進(jìn)行了架構(gòu)強(qiáng)化,能夠完美解決第一種部署方案的缺點,在主庫發(fā)生故障切換時,GoldenGate的抽取進(jìn)程能夠自動的進(jìn)行故障切換并繼續(xù)無縫的完成事務(wù)抽取,全自動無需人工干預(yù).表1為3種方案的對比結(jié)果.
表1 方案對比矩陣
本文介紹了利用GoldenGate構(gòu)建MySQL數(shù)據(jù)庫到Oracle數(shù)據(jù)庫的異構(gòu)數(shù)據(jù)庫同步復(fù)制架構(gòu),實現(xiàn)了在MySQL集群發(fā)生主從切換時,GoldenGate能夠自動的進(jìn)行故障切換并繼續(xù)無縫的完成事務(wù)抽取,保障了異構(gòu)數(shù)據(jù)庫間數(shù)據(jù)同步復(fù)制的連續(xù)性和可靠性.同時,本文介紹的復(fù)制架構(gòu)不僅僅適用于MySQL數(shù)據(jù)庫到Oracle數(shù)據(jù)庫的異構(gòu)數(shù)據(jù)庫同步復(fù)制,對于MySQL數(shù)據(jù)庫到其他類型數(shù)據(jù)庫的同步復(fù)制同樣具有指導(dǎo)借鑒意義,在整體架構(gòu)不需要做大的改動的情況下,只用對GoldenGate的復(fù)制端稍作調(diào)整,就能滿足MySQL數(shù)據(jù)庫到其他類型數(shù)據(jù)庫的同步復(fù)制需求.
1 張偉麗,江春華,魏勁超.MySQL復(fù)制技術(shù)的研究及應(yīng)用.計算機(jī)科學(xué),2012,39(11A):168-170.
2 邢志峰.MySQL主從復(fù)制的研究與應(yīng)用.電子技術(shù)與軟件工程,2017,(15):188.
3 劉騰.MySQL復(fù)制技術(shù)的研究與改進(jìn)[碩士學(xué)位論文].杭州:浙江大學(xué),2011.
4 田關(guān)偉.MySQL復(fù)制技術(shù)分析研究.哈爾濱師范大學(xué)自然科學(xué)學(xué)報,2015,31(4):45-48,64.
5 韋一鳴.基于MySQL復(fù)制技術(shù)的數(shù)據(jù)庫集群研究[碩士學(xué)位論文].杭州:杭州電子科技大學(xué),2014.
6 宣振國.基于Mysql的數(shù)據(jù)庫集群設(shè)計與實現(xiàn)[碩士學(xué)位論文].北京:北京郵電大學(xué),2013.
7 曲波,鄧旭東,姜鋒.Oracle GoldenGate數(shù)據(jù)同步機(jī)制研究與應(yīng)用.微型電腦應(yīng)用,2014,30(6):55-58.
8 曹建輝.基于GoldenGate高級復(fù)制技術(shù)實現(xiàn)數(shù)據(jù)庫同步.甘 肅 科 技 ,2012,28(24):23-25.[doi:10.3969/j.issn.1000-0952.2012.24.008]
9 王二暖.Goldengate實現(xiàn)異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)同步.電腦開發(fā)與應(yīng)用,2014,27(5):70-72.