一種基于日志解析的數(shù)據(jù)庫復制方法及裝置的制造方法
【專利摘要】本申請涉及數(shù)據(jù)庫復制技術領域,尤其涉及一種基于日志解析的數(shù)據(jù)庫復制方法及裝置,用以解決現(xiàn)有技術當主端解析得到的數(shù)據(jù)庫回放語句數(shù)量非常大時,異地數(shù)據(jù)庫復制效率低的技術問題,包括:根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)合并后的行對象進行數(shù)據(jù)庫回放,該方法在發(fā)送行對象給目標數(shù)據(jù)庫之前,首先對行對象進行合并,從而大大減少了數(shù)據(jù)量,從而在提高了將行對象從源數(shù)據(jù)庫發(fā)送到目標數(shù)據(jù)庫的速度,提高了數(shù)據(jù)庫復制效率。
【專利說明】
一種基于日志解析的數(shù)據(jù)庫復制方法及裝置
技術領域
[0001]本申請涉及數(shù)據(jù)庫復制技術領域,尤其涉及一種基于日志解析的數(shù)據(jù)庫復制方法及裝置?!颈尘凹夹g】
[0002]隨著應用系統(tǒng)的不斷發(fā)展,系統(tǒng)對于數(shù)據(jù)庫的依賴與日倶增。數(shù)據(jù)庫應用場景的豐富也導致數(shù)據(jù)庫之間的復制需求與要求日趨旺盛,數(shù)據(jù)庫復制是在數(shù)據(jù)庫之間對數(shù)據(jù)和數(shù)據(jù)庫對象進行復制和分發(fā),并進行同步以確保其一致性的一組技術。
[0003]現(xiàn)有技術中,基于日志解析的數(shù)據(jù)庫復制技術,通過主端將源數(shù)據(jù)庫引擎產(chǎn)生的日志解析成數(shù)據(jù)庫回放語句,并通過異地網(wǎng)絡將解析后的大量數(shù)據(jù)回放語句發(fā)送至目標數(shù)據(jù)庫,然后由備端根據(jù)接收到的數(shù)據(jù)回放語句進行數(shù)據(jù)庫回放,并將回放得到的數(shù)據(jù)存儲到目標數(shù)據(jù)庫,從而實現(xiàn)將源數(shù)據(jù)庫的數(shù)據(jù)復制到目標數(shù)據(jù)庫。
[0004]上述方法存在的問題是:當主端解析得到的數(shù)據(jù)庫回放語句數(shù)量非常大時,異地網(wǎng)絡傳輸會比較慢,因而導致整個數(shù)據(jù)庫異地復制的時間會非常長,降低了異地數(shù)據(jù)庫復制效率。
【發(fā)明內(nèi)容】
[0005]本申請?zhí)峁┮环N基于日志解析的數(shù)據(jù)庫復制方法,用以解決現(xiàn)有技術當主端解析得到的數(shù)據(jù)庫回放語句數(shù)量非常大時,異地數(shù)據(jù)庫復制效率低的技術問題。
[0006]—方面,本申請實施例提供的一種基于日志解析的數(shù)據(jù)庫復制方法,包括:
[0007]根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象;
[0008]根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)所述主鍵標識和合并后的語句生成合并后的行對象;
[0009]將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使所述目標數(shù)據(jù)庫根據(jù)所述合并后的行對象進行數(shù)據(jù)庫回放。
[0010]可選地,所述根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象,包括:
[0011]根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)中的數(shù)據(jù)庫日志解析為至少一張行對象表;其中一張行對象表包含至少一個行對象;一個行對象一行的一條數(shù)據(jù)庫操作語句;
[0012]根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,包括:
[0013]針對每一張行對象表,為所述行對象表分配一個線程,并調(diào)用該線程根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象。
[0014]可選地,所述預先設定的規(guī)則包含下列一項或任幾項的組合:
[0015]將多條進行數(shù)據(jù)插入的語句合并成一條數(shù)據(jù)插入語句;
[0016]將多條進行數(shù)據(jù)刪除的語句合并成一條數(shù)據(jù)刪除語句;
[0017]將多條進行數(shù)據(jù)更新的語句合并成一條數(shù)據(jù)更新語句;
[0018]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句;
[0019]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0020]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)插入的兩條語句合并為一條數(shù)據(jù)插入語句;[0021 ]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;[〇〇22]將先進行數(shù)據(jù)更新,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句。
[0023]可選地,將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫之前,還包括:[〇〇24]對所述合并后的行對象進行數(shù)據(jù)加密壓縮。
[0025]可選地,根據(jù)源數(shù)據(jù)中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象之前,該方法還包括:[〇〇26] 根據(jù)源結構化查詢語言MySQL數(shù)據(jù)庫中的二進制日志Binary Log日志,將所述 Binary Log日志解析為行對象;
[0027]根據(jù)預先設定的規(guī)則,對具有相同主鍵標識的行對象進行合并;[〇〇28]將所述合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使所述目標MySQL數(shù)據(jù)庫根據(jù)所述合并后的行對象進行My SQL數(shù)據(jù)庫回放。
[0029]另一方面,本申請實施例提供的一種基于日志解析的數(shù)據(jù)庫復制裝置,包括:
[0030]解析單元,用于根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象;
[0031]合并單元,用于根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)所述主鍵標識和合并后的語句生成合并后的行對象;
[0032]發(fā)送單元,用于將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使所述目標數(shù)據(jù)庫根據(jù)所述合并后的行對象進行數(shù)據(jù)庫回放。[〇〇33]可選地,所述解析單元,具體用于:
[0034]根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)中的數(shù)據(jù)庫日志解析為至少一張行對象表;其中一張行對象表包含至少一個行對象;一個行對象一行的一條數(shù)據(jù)庫操作語句;
[0035]根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,包括:[〇〇36]針對每一張行對象表,為所述行對象表分配一個線程,并調(diào)用該線程根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象。
[0037]可選地,所述預先設定的規(guī)則包含下列一項或任幾項的組合:[〇〇38]將多條進行數(shù)據(jù)插入的語句合并成一條數(shù)據(jù)插入語句;[〇〇39]將多條進行數(shù)據(jù)刪除的語句合并成一條數(shù)據(jù)刪除語句;[〇〇4〇]將多條進行數(shù)據(jù)更新的語句合并成一條數(shù)據(jù)更新語句;
[0041]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句;
[0042]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0043]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)插入的兩條語句合并為一條數(shù)據(jù)插入語句;
[0044]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0045]將先進行數(shù)據(jù)更新,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句。
[0046]可選地,所述裝置還包括加密單元,具體用于:
[0047]對所述合并后的行對象進行數(shù)據(jù)加密壓縮。[〇〇48] 可選地,所述發(fā)送單元還用于:[〇〇49] 根據(jù)源結構化查詢語言MySQL數(shù)據(jù)庫中的二進制日志Binary Log日志,將所述 Binary Log日志解析為行對象;
[0050]根據(jù)預先設定的規(guī)則,對具有相同主鍵標識的行對象進行合并;[〇〇51]將所述合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使所述目標MySQL數(shù)據(jù)庫根據(jù)所述合并后的行對象進行My SQL數(shù)據(jù)庫回放。[〇〇52]本申請實施例提供的方法,根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句, 并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)合并后的行對象進行數(shù)據(jù)庫回放,該方法在發(fā)送行對象給目標數(shù)據(jù)庫之前,首先對行對象進行合并,從而大大減少了數(shù)據(jù)量,從而在提高了將行對象從源數(shù)據(jù)庫發(fā)送到目標數(shù)據(jù)庫的速度,提高了數(shù)據(jù)庫復制效率?!靖綀D說明】
[0053]為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域的普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[〇〇54]圖1為本申請實施例提供的基于日志解析的數(shù)據(jù)庫復制方法流程圖;
[0055]圖2為本申請實施例提供的基于日志解析的數(shù)據(jù)庫復制方法詳細流程圖;
[0056]圖3為本申請實施例提供的基于日志解析的數(shù)據(jù)庫復制裝置示意圖?!揪唧w實施方式】
[0057]為了使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本申請作進一步地詳細描述,顯然,所描述的實施例僅僅是本申請一部份實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本申請保護的范圍。
[0058]下面結合說明書附圖對本申請實施例作進一步詳細描述。
[0059]如圖1所示,本申請實施例提供的基于日志解析的數(shù)據(jù)庫復制方法,包括:
[0060]步驟101、根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象;
[0061]步驟102、根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象;
[0062]步驟103、將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)所述合并后的行對象進行數(shù)據(jù)庫回放。
[0063]源數(shù)據(jù)庫可以是甲骨文Oracle數(shù)據(jù)庫,SQL(Structured Query Language,結構化查詢語言)數(shù)據(jù)庫,MySQL(My Structured Query Language,關系型結構化查詢語言)數(shù)據(jù)庫等等,目標數(shù)據(jù)庫與源數(shù)據(jù)庫類型相同,可以相應的是Oracle數(shù)據(jù)庫,SQL數(shù)據(jù)庫,MySQL數(shù)據(jù)庫等等。
[0064]數(shù)據(jù)庫日志中記錄的有對數(shù)據(jù)進行操作的數(shù)據(jù)庫語句,例如查詢數(shù)據(jù)語句,刪除數(shù)據(jù)語句,以及更新數(shù)據(jù)語句等。
[0065]上述步驟101中,根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象,其中一個行對象對應一個數(shù)據(jù)庫語句,對應同一行的多個行對象具有相同的主鍵標識,例如, 對數(shù)據(jù)庫表A的第一行從時間先后順序看,分別有3個數(shù)據(jù)庫語句,且第一行對應的主鍵標識為A1,其中,第1個數(shù)據(jù)庫語句是對第一行有一個數(shù)據(jù)插入的語句,因此第一行對應一個行對象1,行對象1對應的主鍵標識為A1,對應的數(shù)據(jù)庫語句為對第一行進行數(shù)據(jù)插入的操作;第2個數(shù)據(jù)庫語句是對第一行有一個數(shù)據(jù)刪除的語句,因此第一行對應一個行對象2,行對象2對應的主鍵標識為A1,對應的數(shù)據(jù)庫語句為刪除第一行數(shù)據(jù)的刪除操作;第3個數(shù)據(jù)庫語句是對第一行有一個數(shù)據(jù)更新的語句,因此第一行對應一個行對象3,行對象3對應的主鍵標識為A1,對應的數(shù)據(jù)庫語句為更新第一行的數(shù)據(jù)的更新操作。步驟101中,通過讀取數(shù)據(jù)庫日志,可以將數(shù)據(jù)庫日志解析為多個行對象。
[0066]步驟102中,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,例如,如上例所述,表A 的第一行對應有3個數(shù)據(jù)庫操作,可以將具有相同主鍵標識的行對象對應的語句進行合并, 即對同一個行的多個操作語句進行合并,合并之后,一個行只對應一個行對象,且只有一條合并后的語句。因而大大減少了總的行對象的數(shù)量。
[0067]步驟103、將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)所述合并后的行對象進行數(shù)據(jù)庫回放。由于步驟102對行對象進行了合并,因而大大減少了行對象的數(shù)量,從而在傳輸至目標數(shù)據(jù)庫時,提高了傳輸?shù)乃俣取?br>[0068]本申請實施例提供的方法,根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句, 并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)合并后的行對象進行數(shù)據(jù)庫回放,該方法在發(fā)送行對象給目標數(shù)據(jù)庫之前,首先對行對象進行合并,從而大大減少了數(shù)據(jù)量,從而在提高了將行對象從源數(shù)據(jù)庫發(fā)送到目標數(shù)據(jù)庫的速度,提高了數(shù)據(jù)庫復制效率。
[0069]具體地,在對數(shù)據(jù)庫日志進行解析時,可以將數(shù)據(jù)庫日志解析成多張表,然后將一張表的一行作為一個對象,一個對象對應一行的一個數(shù)據(jù)庫操作語句,或者是一個對象對應一行的多個數(shù)據(jù)庫操作語句;或者是將一張表整體作為一個對象,對于解析的方法,本發(fā)明不做具體限定。
[0070]可選地,所述根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象,包括:[0071 ]根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)中的數(shù)據(jù)庫日志解析為至少一張行對象表;其中一張行對象表包含至少一個行對象;一個行對象一行的一條數(shù)據(jù)庫操作語句;
[0072]上述方法,將源數(shù)據(jù)庫中的數(shù)據(jù)庫日志解析為至少一張行對象表;其中一張行對象表包含至少一個行對象,一個行對象一行的一條數(shù)據(jù)庫操作語句,因此一個行對象只對應一行一次操作的數(shù)據(jù)庫操作語句,例如針對表B第2行,在一個時間段內(nèi)有2個操作,分別是刪除語句和更新語句,則改行解析為兩個行對象,分別對應改行的兩個數(shù)據(jù)庫操作語句。該方法將數(shù)據(jù)庫日志解析為以一行的一個數(shù)據(jù)庫操作語句為最小單位,可為后續(xù)數(shù)據(jù)庫的復制提供充分詳細的信息,因而方便了數(shù)據(jù)庫的復制,提高了效率。
[0073]基于上述數(shù)據(jù)庫日志解析方式,可根據(jù)下列方式對具有相同主鍵標識的行對象進行合并。
[0074]可選地,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,包括:
[0075]針對每一張行對象表,為所述行對象表分配一個線程,并調(diào)用該線程根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象。
[0076]上述方法,針對每一張行對象表,可分配一個線程進行行對象對應的語句進行合并的操作,從而可以并發(fā)地將根據(jù)源數(shù)據(jù)庫解析得到的行對象進行合并,從而提高行對象合并的效率,提高系統(tǒng)效率。
[0077]對于將具有相同主鍵標識的行對象對應的語句進行合并的規(guī)則有很多,本申請實施例提供的行對象對應的語句進行合并的規(guī)則如下:
[0078]可選地,所述預先設定的規(guī)則包含下列一項或任幾項的組合:[〇〇79]將多條進行數(shù)據(jù)插入的語句合并成一條數(shù)據(jù)插入語句;[〇〇8〇]將多條進行數(shù)據(jù)刪除的語句合并成一條數(shù)據(jù)刪除語句;[0081 ]將多條進行數(shù)據(jù)更新的語句合并成一條數(shù)據(jù)更新語句;[〇〇82]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句;
[0083]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0084]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)插入的兩條語句合并為一條數(shù)據(jù)插入語句;
[0085]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0086]將先進行數(shù)據(jù)更新,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句。
[0087]上述方法,根據(jù)上述規(guī)則的組合,可對任意具有相同主鍵標識的行對象對應的語句進行合并,例如一行前后有以下操作:刪除,插入,更新,則可以將刪除,插入,更新分別對應的3個語句合并為一條語句,首先將刪除語句和插入語句合并為插入語句,然后將插入語句和更新語句合并為插入語句,因此合并只有只剩下一條插入語句,對于合并后的插入語句的具體內(nèi)容根據(jù)實際應用而定,本發(fā)明不做限定。因此,通過上述預先設定的規(guī)則,可對具有相同主鍵標識的行對象對應的語句進行合并,然后根據(jù)合并后語句以及根據(jù)改行對應的主鍵標識,生產(chǎn)一個新的行對象,該新的行對象為該行合并后的行對象,由此可見,通過上述規(guī)則,可將具有相同主鍵標識的多個行對象合并為一個行對象,大大減少了數(shù)據(jù)量,在將合并后的行對象傳輸至目標數(shù)據(jù)庫時,由于數(shù)據(jù)量的減少而提高了發(fā)送效率。
[0088]另外,在將合并后的行對象發(fā)送給目標數(shù)據(jù)庫之前,可對合并后的行對象做一些預處理,例如加密,或者是不加密,以及還可以是對數(shù)據(jù)做壓縮,或者不壓縮,具體根據(jù)實際需要而定。
[0089]可選地,本申請實施例提供的方法,在將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫之前,還包括:
[0090]對所述合并后的行對象進行數(shù)據(jù)加密壓縮。
[0091]該方法中,在將合并后的行對象發(fā)送給目標數(shù)據(jù)庫之前進行加密和壓縮操作,從而提高數(shù)據(jù)發(fā)送的安全性,以及進一步降低了數(shù)據(jù)發(fā)送量。
[0092]可選地,根據(jù)源數(shù)據(jù)中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象之前,該方法還包括:[〇〇93] 根據(jù)源結構化查詢語言MySQL數(shù)據(jù)庫中的二進制日志Binary Log日志,將所述 Binary Log日志解析為行對象;
[0094]根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象;[〇〇95]將所述合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使所述目標MySQL數(shù)據(jù)庫根據(jù)所述合并后的行對象進行My SQL數(shù)據(jù)庫回放。[〇〇96]上述方法,是針對源數(shù)據(jù)庫和目標數(shù)據(jù)庫都是MySQL數(shù)據(jù)庫,并且數(shù)據(jù)庫日志是 Binary Log日志的場景下的數(shù)據(jù)庫復制方法,該方法中,可通過模擬MySQL dump協(xié)議將 Binary Log日志拉取到本地,并根據(jù)Binary Log日志格式將其解析為行對象,然后根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,將合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使目標My SQL數(shù)據(jù)庫根據(jù)合并后的行對象進行My SQL數(shù)據(jù)庫回放。
[0097]下面對本申請實施例提供的基于日志解析的數(shù)據(jù)庫復制方法做詳細描述。[〇〇98]步驟201、主端對數(shù)據(jù)庫日志進行解析;[〇〇99]步驟202、主端進行數(shù)據(jù)庫行對象合并操作;
[0100]步驟203、主端進行數(shù)據(jù)傳輸序列化;
[0101]步驟204、主端進行數(shù)據(jù)庫加密壓縮;
[0102]步驟205、主端進行主端異地網(wǎng)絡數(shù)據(jù)發(fā)送;
[0103]步驟206、備端進行備端異地網(wǎng)絡數(shù)據(jù)接收;[〇1〇4]步驟207、備端進行數(shù)據(jù)解壓縮解密;[〇1〇5]步驟208、備端進行數(shù)據(jù)反序列化;
[0106]步驟209、備端進行數(shù)據(jù)回放操作,將回放后的數(shù)據(jù)存儲到目標數(shù)據(jù)庫。
[0107]本申請實施例提供的方法,根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句, 并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)合并后的行對象進行數(shù)據(jù)庫回放,該方法在發(fā)送行對象給目標數(shù)據(jù)庫之前,首先對行對象進行合并,從而大大減少了數(shù)據(jù)量,從而在提高了將行對象從源數(shù)據(jù)庫發(fā)送到目標數(shù)據(jù)庫的速度,提高了數(shù)據(jù)庫復制效率。
[0108]基于相同的技術構思,本申請實施例還提供基于日志解析的數(shù)據(jù)庫復制裝置。本申請實施例提供的基于日志解析的數(shù)據(jù)庫復制方法裝置如圖3所示。
[0109]解析單元301,用于根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象;
[0110]合并單元302,用于根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)所述主鍵標識和合并后的語句生成合并后的行對象;
[0111]發(fā)送單元304,用于將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使所述目標數(shù)據(jù)庫根據(jù)所述合并后的行對象進行數(shù)據(jù)庫回放。
[0112] 可選地,所述解析單元301,具體用于:[〇113]根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)中的數(shù)據(jù)庫日志解析為至少一張行對象表;其中一張行對象表包含至少一個行對象;一個行對象一行的一條數(shù)據(jù)庫操作語句;
[0114]根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,包括:
[0115]針對每一張行對象表,為所述行對象表分配一個線程,并調(diào)用該線程根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并后的語句生成合并后的行對象。
[0116]可選地,所述預先設定的規(guī)則包含下列一項或任幾項的組合:
[0117]將多條進行數(shù)據(jù)插入的語句合并成一條數(shù)據(jù)插入語句;
[0118]將多條進行數(shù)據(jù)刪除的語句合并成一條數(shù)據(jù)刪除語句;
[0119]將多條進行數(shù)據(jù)更新的語句合并成一條數(shù)據(jù)更新語句;
[0120]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句;
[0121]將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0122]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)插入的兩條語句合并為一條數(shù)據(jù)插入語句;
[0123]將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;
[0124]將先進行數(shù)據(jù)更新,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句。
[0125]可選地,所述裝置還包括加密單元303,具體用于:
[0126]對所述合并后的行對象進行數(shù)據(jù)加密壓縮。
[0127]可選地,所述發(fā)送單元304還用于:
[0128]根據(jù)源結構化查詢語言MySQL數(shù)據(jù)庫中的二進制日志Binary Log日志,將所述 Binary Log日志解析為行對象;
[0129]根據(jù)預先設定的規(guī)則,對具有相同主鍵標識的行對象進行合并;[〇13〇]將所述合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使所述目標MySQL數(shù)據(jù)庫根據(jù)所述合并后的行對象進行My SQL數(shù)據(jù)庫回放。[0131 ]本申請實施例提供的方法,根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將數(shù)據(jù)庫日志解析為行對象,根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句, 并根據(jù)主鍵標識和合并后的語句生成合并后的行對象,將合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使目標數(shù)據(jù)庫根據(jù)合并后的行對象進行數(shù)據(jù)庫回放,該方法在發(fā)送行對象給目標數(shù)據(jù)庫之前,首先對行對象進行合并,從而大大減少了數(shù)據(jù)量,從而在提高了將行對象從源數(shù)據(jù)庫發(fā)送到目標數(shù)據(jù)庫的速度,提高了數(shù)據(jù)庫復制效率。
[0132]本申請是參照根據(jù)本申請實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0133]這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0134]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0135]盡管已描述了本申請的優(yōu)選實施例,但本領域內(nèi)的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本申請范圍的所有變更和修改。
[0136]顯然,本領域的技術人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權利要求及其等同技術的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
【主權項】
1.一種基于日志解析的數(shù)據(jù)庫復制方法,其特征在于,包括:根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象;根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并 根據(jù)所述主鍵標識和合并后的語句生成合并后的行對象;將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使所述目標數(shù)據(jù)庫根據(jù)所述合并后的行 對象進行數(shù)據(jù)庫回放。2.如權利要求1所述的方法,其特征在于,所述根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述 數(shù)據(jù)庫日志解析為行對象,包括:根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)中的數(shù)據(jù)庫日志解析為至少一張行對象 表;其中一張行對象表包含至少一個行對象;一個行對象一行的一條數(shù)據(jù)庫操作語句; 根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并 根據(jù)主鍵標識和合并后的語句生成合并后的行對象,包括:針對每一張行對象表,為所述行對象表分配一個線程,并調(diào)用該線程根據(jù)預先設定的 規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并 后的語句生成合并后的行對象。3.如權利要求1或2所述的方法,其特征在于,所述預先設定的規(guī)則包含下列一項或任 幾項的組合:將多條進行數(shù)據(jù)插入的語句合并成一條數(shù)據(jù)插入語句;將多條進行數(shù)據(jù)刪除的語句合并成一條數(shù)據(jù)刪除語句;將多條進行數(shù)據(jù)更新的語句合并成一條數(shù)據(jù)更新語句;將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句;將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)插入的兩條語句合并為一條數(shù)據(jù)插入語句;將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;將先進行數(shù)據(jù)更新,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句。4.如權利要求1所述的方法,其特征在于,將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫之 前,還包括:對所述合并后的行對象進行數(shù)據(jù)加密壓縮。5.如權利要求1、2和4中任一項所述的方法,其特征在于,根據(jù)源數(shù)據(jù)中的數(shù)據(jù)庫日志, 將所述數(shù)據(jù)庫日志解析為行對象之前,該方法還包括:根據(jù)源結構化查詢語言MySQL數(shù)據(jù)庫中的二進制日志Binary Log日志,將所述Binary Log日志解析為行對象;根據(jù)預先設定的規(guī)則,對具有相同主鍵標識的行對象進行合并;將所述合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使所述目標MySQL數(shù)據(jù)庫根據(jù)所述 合并后的行對象進行My SQL數(shù)據(jù)庫回放。6.—種基于日志解析的數(shù)據(jù)庫復制裝置,其特征在于,包括:解析單元,用于根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)庫日志解析為行對象;合并單元,用于根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并 成一個語句,并根據(jù)所述主鍵標識和合并后的語句生成合并后的行對象;發(fā)送單元,用于將所述合并后的行對象發(fā)送給目標數(shù)據(jù)庫,以使所述目標數(shù)據(jù)庫根據(jù) 所述合并后的行對象進行數(shù)據(jù)庫回放。7.如權利要求6所述的裝置,其特征在于,所述解析單元,具體用于:根據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)庫日志,將所述數(shù)據(jù)中的數(shù)據(jù)庫日志解析為至少一張行對象 表;其中一張行對象表包含至少一個行對象;一個行對象一行的一條數(shù)據(jù)庫操作語句; 根據(jù)預先設定的規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并 根據(jù)主鍵標識和合并后的語句生成合并后的行對象,包括:針對每一張行對象表,為所述行對象表分配一個線程,并調(diào)用該線程根據(jù)預先設定的 規(guī)則,將具有相同主鍵標識的行對象對應的語句合并成一個語句,并根據(jù)主鍵標識和合并 后的語句生成合并后的行對象。8.如權利要求6或7所述的裝置,其特征在于,所述預先設定的規(guī)則包含下列一項或任 幾項的組合:將多條進行數(shù)據(jù)插入的語句合并成一條數(shù)據(jù)插入語句;將多條進行數(shù)據(jù)刪除的語句合并成一條數(shù)據(jù)刪除語句;將多條進行數(shù)據(jù)更新的語句合并成一條數(shù)據(jù)更新語句;將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句;將先進行數(shù)據(jù)插入,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)插入的兩條語句合并為一條數(shù)據(jù)插入語句;將先進行數(shù)據(jù)刪除,后進行數(shù)據(jù)更新的兩條語句合并為一條數(shù)據(jù)更新語句;將先進行數(shù)據(jù)更新,后進行數(shù)據(jù)刪除的兩條語句合并為一條數(shù)據(jù)刪除語句。9.如權利要求6所述的方法,其特征在于,所述裝置還包括加密單元,具體用于:對所述合并后的行對象進行數(shù)據(jù)加密壓縮。10.如權利要求6、7和9中任一項所述的裝置,其特征在于,所述發(fā)送單元還用于:根據(jù)源結構化查詢語言MySQL數(shù)據(jù)庫中的二進制日志Binary Log日志,將所述Binary Log日志解析為行對象;根據(jù)預先設定的規(guī)則,對具有相同主鍵標識的行對象進行合并;將所述合并后的行對象發(fā)送給目標MySQL數(shù)據(jù)庫,以使所述目標MySQL數(shù)據(jù)庫根據(jù)所述 合并后的行對象進行My SQL數(shù)據(jù)庫回放。
【文檔編號】G06F17/30GK105955970SQ201510776844
【公開日】2016年9月21日
【申請日】2015年11月12日
【發(fā)明人】祖立軍, 李戈, 劉國寶
【申請人】中國銀聯(lián)股份有限公司