欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)庫同步方法及裝置制造方法

文檔序號(hào):6636029閱讀:180來源:國知局
一種數(shù)據(jù)庫同步方法及裝置制造方法
【專利摘要】本申請(qǐng)公開了一種數(shù)據(jù)庫同步方法及裝置,應(yīng)用于至少包含第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的數(shù)據(jù)系統(tǒng),該方法包含:在第一數(shù)據(jù)庫由主數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,提取第一數(shù)據(jù)庫的第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志;根據(jù)第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志,更新第二數(shù)據(jù)庫日志;以及根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)第二數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行同步操作。通過上述方法,由于第二數(shù)據(jù)庫已獲取之前尚未同步過來的日志,并對(duì)自身的數(shù)據(jù)執(zhí)行了這部分日志中記錄的操作,因此,此后第二數(shù)據(jù)庫中不再缺少第一數(shù)據(jù)庫之前尚未同步過來的數(shù)據(jù),且第二數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)也是正確的。
【專利說明】一種數(shù)據(jù)庫同步方法及裝置

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)庫同步方法及裝置。

【背景技術(shù)】
[0002] 在分布式系統(tǒng)中,為了增強(qiáng)系統(tǒng)的可靠性,經(jīng)常使用主從模式來部署在系統(tǒng)中使 用的數(shù)據(jù)庫。目前在分布式系統(tǒng)中所使用的數(shù)據(jù)庫可以包含多個(gè)副本,通常有一個(gè)主數(shù)據(jù) 庫和至少一個(gè)從數(shù)據(jù)庫,當(dāng)主數(shù)據(jù)庫正常工作時(shí),會(huì)將自身的數(shù)據(jù)同步給各從數(shù)據(jù)庫。
[0003] 在現(xiàn)有技術(shù)中,當(dāng)主數(shù)據(jù)庫(以下稱為第一數(shù)據(jù)庫)無法正常工作時(shí),如第一數(shù)據(jù) 庫的相關(guān)進(jìn)程崩潰時(shí),或者第一數(shù)據(jù)庫所在的主機(jī)宕機(jī)時(shí),則會(huì)有一個(gè)優(yōu)先級(jí)最高的從數(shù) 據(jù)庫(以下稱為第二數(shù)據(jù)庫)切換為新的主數(shù)據(jù)庫,而第一數(shù)據(jù)庫在恢復(fù)正常工作后,會(huì)切 換為一個(gè)新的從數(shù)據(jù)庫,此后由第二數(shù)據(jù)庫同步數(shù)據(jù)給第一數(shù)據(jù)庫和其它各從數(shù)據(jù)庫。
[0004] 但是,由于第一數(shù)據(jù)庫在無法正常工作之前,可能有部分最近的數(shù)據(jù)尚未同步給 各從數(shù)據(jù)庫(包括第二數(shù)據(jù)庫),而此后,是由第二數(shù)據(jù)庫同步數(shù)據(jù)給第一數(shù)據(jù)庫和其它各 從數(shù)據(jù)庫,因此,第二數(shù)據(jù)庫中缺少了第一數(shù)據(jù)庫尚未同步過來的這部分?jǐn)?shù)據(jù),從而,可能 導(dǎo)致第二數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)不正確。


【發(fā)明內(nèi)容】

[0005] 鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上 述問題的數(shù)據(jù)庫同步方法及裝置,在原來的主數(shù)據(jù)庫切換成為從數(shù)據(jù)庫后,確保新的主數(shù) 據(jù)庫中數(shù)據(jù)狀態(tài)正確。
[0006] 根據(jù)本發(fā)明的第一個(gè)方面,提出一種數(shù)據(jù)庫同步方法,所述方法應(yīng)用于至少包含 第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的數(shù)據(jù)系統(tǒng),所述第一數(shù)據(jù)庫由主數(shù)據(jù)庫切換為從數(shù)據(jù)庫,所述 第二數(shù)據(jù)庫由從數(shù)據(jù)庫切換為主數(shù)據(jù)庫,所述方法包括:
[0007] 在所述第一數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,提取所述第一數(shù)據(jù)庫的第一數(shù)據(jù)庫日志和 所述第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志;
[0008] 根據(jù)所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志,更新所述第二數(shù)據(jù)庫日志;
[0009] 根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)所述第二數(shù)據(jù)庫中的數(shù)據(jù) 進(jìn)行同步操作。
[0010] 可選地,所述日志至少包括二進(jìn)制日志binlog。
[0011] 可選地,根據(jù)所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志,更新所述第二數(shù)據(jù)庫 日志,包括:
[0012] 查找包含在所述第一數(shù)據(jù)庫日志中,且不包含在所述第二數(shù)據(jù)庫日志中的操作記 錄;
[0013] 將查找到的各操作記錄并入所述第二數(shù)據(jù)庫日志中,并將并入后的第二數(shù)據(jù)庫日 志作為更新后的第二數(shù)據(jù)庫日志。
[0014] 可選地,查找包含在所述第一數(shù)據(jù)庫日志中,且不包含在所述第二數(shù)據(jù)庫日志中 的操作記錄,包括:
[0015] 在所述第一數(shù)據(jù)庫日志中,確定生成時(shí)間距當(dāng)前時(shí)刻最近、且同時(shí)包含在所述第 一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志中的操作記錄;
[0016] 將確定出的操作記錄的生成時(shí)間作為分界時(shí)間戳;
[0017] 在所述第一數(shù)據(jù)庫日志中,查找生成時(shí)間晚于所述分界時(shí)間戳的操作記錄。
[0018] 可選地,將查找到的各操作記錄并入所述第二數(shù)據(jù)庫日志中,包括:
[0019] 針對(duì)查找到的每條操作記錄,確定該操作記錄對(duì)應(yīng)的標(biāo)識(shí),作為待定標(biāo)識(shí);
[0020] 在所述第二數(shù)據(jù)庫日志中,確定生成時(shí)間晚于該操作記錄的生成時(shí)間的各操作記 錄對(duì)應(yīng)的標(biāo)識(shí),作為對(duì)比標(biāo)識(shí);
[0021] 當(dāng)各對(duì)比標(biāo)識(shí)中不存在所述待定標(biāo)識(shí)時(shí),根據(jù)該操作記錄的生成時(shí)間,將該操作 記錄插入所述第二數(shù)據(jù)庫日志中。
[0022] 可選地,當(dāng)各對(duì)比標(biāo)識(shí)中存在所述待定標(biāo)識(shí)時(shí),忽略所述第一數(shù)據(jù)庫日志中所述 待定標(biāo)識(shí)對(duì)應(yīng)的操作記錄。
[0023] 可選地,根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)所述第二數(shù)據(jù)庫 中的數(shù)據(jù)進(jìn)行同步操作,包括:
[0024] 針對(duì)并入所述第二數(shù)據(jù)庫日志中的每條操作記錄,提取該操作記錄中包含的操作 指令,并在所述第二數(shù)據(jù)庫上執(zhí)行該操作指令。
[0025] 根據(jù)本發(fā)明的第二個(gè)方面,提出一種數(shù)據(jù)庫同步裝置,所述裝置應(yīng)用于至少包含 第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的數(shù)據(jù)系統(tǒng),所述第一數(shù)據(jù)庫由主數(shù)據(jù)庫切換為從數(shù)據(jù)庫,所述 第二數(shù)據(jù)庫由從數(shù)據(jù)庫切換為主數(shù)據(jù)庫,所述裝置包括:
[0026] 提取模塊,用于在所述第一數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,提取所述第一數(shù)據(jù)庫的第 一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志;
[0027] 更新模塊,用于根據(jù)所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志,更新所述第二 數(shù)據(jù)庫日志;
[0028] 同步模塊,用于根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)所述第二 數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行同步操作。
[0029] 可選地,所述日志至少包括二進(jìn)制日志binlog。
[0030] 可選地,所述更新模塊進(jìn)一步用于,查找包含在所述第一數(shù)據(jù)庫日志中,且不包含 在所述第二數(shù)據(jù)庫日志中的操作記錄,將查找到的各操作記錄并入所述第二數(shù)據(jù)庫日志 中,并將并入后的第二數(shù)據(jù)庫日志作為更新后的第二數(shù)據(jù)庫日志。
[0031] 可選地,所述更新模塊進(jìn)一步用于,在所述第一數(shù)據(jù)庫日志中,確定生成時(shí)間距當(dāng) 前時(shí)刻最近、且同時(shí)包含在所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志中的操作記錄,將 確定出的操作記錄的生成時(shí)間作為分界時(shí)間戳,在所述第一數(shù)據(jù)庫日志中,查找生成時(shí)間 晚于所述分界時(shí)間戳的操作記錄。
[0032] 可選地,所述更新模塊進(jìn)一步用于,針對(duì)查找到的每條操作記錄,確定該操作記錄 對(duì)應(yīng)的標(biāo)識(shí),作為待定標(biāo)識(shí),在所述第二數(shù)據(jù)庫日志中,確定生成時(shí)間晚于該操作記錄的生 成時(shí)間的各操作記錄對(duì)應(yīng)的標(biāo)識(shí),作為對(duì)比標(biāo)識(shí),當(dāng)各對(duì)比標(biāo)識(shí)中不存在所述待定標(biāo)識(shí)時(shí), 根據(jù)該操作記錄的生成時(shí)間,將該操作記錄插入所述第二數(shù)據(jù)庫日志中。
[0033] 可選的,所述更新模塊進(jìn)一步用于,當(dāng)各對(duì)比標(biāo)識(shí)中存在所述待定標(biāo)識(shí)時(shí),忽略所 述第一數(shù)據(jù)庫日志中所述待定標(biāo)識(shí)對(duì)應(yīng)的操作記錄。
[0034] 可選地,所述同步模塊進(jìn)一步用于,針對(duì)并入所述第二數(shù)據(jù)庫日志中的每條操作 記錄,提取該操作記錄中包含的操作指令,并在所述第二數(shù)據(jù)庫上執(zhí)行該操作指令。
[0035] 根據(jù)本發(fā)明提供的數(shù)據(jù)庫同步方法,由于在第一數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,第二 數(shù)據(jù)庫從第一數(shù)據(jù)庫獲取了之前尚未同步過來的日志,并根據(jù)該日志對(duì)自身的數(shù)據(jù)進(jìn)行了 同步操作,因此,此后第二數(shù)據(jù)庫中不再缺少第一數(shù)據(jù)庫之前尚未同步過來的數(shù)據(jù),且第二 數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)也是正確的。

【專利附圖】

【附圖說明】
[0036] 通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明 的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0037] 圖1為依據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫同步過程;
[0038] 圖2為依據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫同步的詳細(xì)過程;
[0039] 圖3為依據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫同步裝置結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0040] 下面將參照附圖更詳細(xì)地描述本發(fā)明公開的示例性實(shí)施例。雖然附圖中顯示了本 發(fā)明公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本發(fā)明而不應(yīng)被這里闡述 的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本發(fā)明,并且能夠?qū)⒈景l(fā) 明公開的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0041] 以下結(jié)合附圖,詳細(xì)說明本發(fā)明各實(shí)施例提供的技術(shù)方案。
[0042] 圖1為依據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫同步過程,該過程可發(fā)生在至少包含第一數(shù)據(jù) 庫和第二數(shù)據(jù)庫的數(shù)據(jù)系統(tǒng)中。其中,初始時(shí),第一數(shù)據(jù)庫為主數(shù)據(jù)庫,第二數(shù)據(jù)庫為從數(shù) 據(jù)庫,而后,第一數(shù)據(jù)庫由主數(shù)據(jù)庫切換為從數(shù)據(jù)庫,第二數(shù)據(jù)庫由從數(shù)據(jù)庫切換為主數(shù)據(jù) 庫。則數(shù)據(jù)庫同步過程可以包括步驟:
[0043] S101 :服務(wù)器在第一數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,提取第一數(shù)據(jù)庫的第一數(shù)據(jù)庫日 志和第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志。
[0044] S102:根據(jù)第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志,更新第二數(shù)據(jù)庫日志。
[0045] S103:根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)第二數(shù)據(jù)庫中的數(shù) 據(jù)進(jìn)行同步操作。
[0046] 在本發(fā)明的實(shí)施例中,所述的服務(wù)器可以是對(duì)主從數(shù)據(jù)庫的數(shù)據(jù)同步進(jìn)行統(tǒng)一管 理的管理服務(wù)器,服務(wù)器管理著一個(gè)主數(shù)據(jù)庫和至少一個(gè)從數(shù)據(jù)庫。其中,所述的主數(shù)據(jù)庫 和所述的從數(shù)據(jù)庫可以分別位于不同的主機(jī)上,也可以位于同一主機(jī)上。在一般場(chǎng)景下,基 于服務(wù)器的管理,主數(shù)據(jù)庫同步數(shù)據(jù)給各從數(shù)據(jù)庫。但是,當(dāng)主數(shù)據(jù)庫無法正常工作時(shí)(為 了便于描述,此后將該主數(shù)據(jù)庫稱為第一數(shù)據(jù)庫),例如,第一數(shù)據(jù)庫的相關(guān)進(jìn)程崩潰時(shí),或 者第一數(shù)據(jù)庫所在的主機(jī)宕機(jī)時(shí),則會(huì)有一個(gè)預(yù)設(shè)優(yōu)先級(jí)最高的從數(shù)據(jù)庫切換為新的主數(shù) 據(jù)庫(此后將該新的主數(shù)據(jù)庫稱為第二數(shù)據(jù)庫)。
[0047] 從上述可知,在該實(shí)施例中,在第一數(shù)據(jù)庫恢復(fù)正常工作后,會(huì)切換為一個(gè)新的從 數(shù)據(jù)庫,由于此時(shí)第一數(shù)據(jù)庫可能尚有部分最近的數(shù)據(jù)尚未同步給各從數(shù)據(jù)庫(包括第二 數(shù)據(jù)庫),也即,有部分操作已經(jīng)在第一數(shù)據(jù)庫上執(zhí)行,但是尚未在各從數(shù)據(jù)庫上執(zhí)行。為了 在第二數(shù)據(jù)庫上也相應(yīng)地執(zhí)行這部分操作,以保證第二數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)正確,則服務(wù) 器此時(shí)可提取第一數(shù)據(jù)庫的第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志。其中,第一 數(shù)據(jù)庫日志用于記錄第一數(shù)據(jù)庫執(zhí)行過的操作,第二數(shù)據(jù)庫日志用于記錄第二數(shù)據(jù)庫執(zhí)行 過的操作。然后,服務(wù)器可根據(jù)第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志,更新第二數(shù)據(jù)庫日志, 也即,在第二數(shù)據(jù)庫日志中更新第一數(shù)據(jù)庫已執(zhí)行、而第二數(shù)據(jù)庫尚未執(zhí)行的這部分操作 所對(duì)應(yīng)的操作記錄,進(jìn)而,服務(wù)器可根據(jù)更新后的第二數(shù)據(jù)庫日志中的各操作記錄,對(duì)第二 數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行同步操作。至此,第二數(shù)據(jù)庫中不再缺少第一數(shù)據(jù)庫之前尚未同步過 來的數(shù)據(jù),且第二數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)也是正確的。
[0048] 依據(jù)本發(fā)明的一個(gè)實(shí)施例,本發(fā)明中所述的日志可以是二進(jìn)制日志binlog,也可 以是用于記錄數(shù)據(jù)庫中執(zhí)行過的數(shù)據(jù)操作的其他類型的日志,所述的數(shù)據(jù)庫可以是MYSQL, 也可以是其他類型的數(shù)據(jù)庫,本發(fā)明的實(shí)施例對(duì)所述的日志的類型,以及所述的數(shù)據(jù)庫的 類型并不做限定。其中,每個(gè)數(shù)據(jù)庫都可分別設(shè)置有自身的日志,并按照時(shí)間先后順序,將 該數(shù)據(jù)庫執(zhí)行過的所有的數(shù)據(jù)操作記錄在該日志中。
[0049] 由于用戶是以向數(shù)據(jù)庫發(fā)送結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,SQL) 語句的方式,對(duì)該數(shù)據(jù)庫進(jìn)行數(shù)據(jù)修改操作的,因此,數(shù)據(jù)庫在自身的日志中所記錄的每 條操作記錄都可包含有一條對(duì)應(yīng)的SQL語句,這些SQL語句可以是DROP、CREATE、ALTER、 GRANT、REVOKE、TRUNCATE、UPDATE、INSERT、DELETE等語句,另外,日志中并不會(huì)記錄SELECT 語句和沒有對(duì)數(shù)據(jù)進(jìn)行實(shí)際更新的UPDATE語句。除了SQL語句之外,日志中的每條操作記 錄還可包含該操作記錄的生成時(shí)間、該SQL語句的執(zhí)行花費(fèi)時(shí)間、生成該條操作記錄的主 機(jī)標(biāo)識(shí)(ServerID)、發(fā)送該SQL語句的客戶線程標(biāo)識(shí)等信息。
[0050] 在此,還對(duì)基于binlog進(jìn)行主從數(shù)據(jù)庫同步的方式進(jìn)行簡單說明。在主數(shù)據(jù)庫 的日志開關(guān)開啟,并正常記錄binlog的情況下,各從數(shù)據(jù)庫可定期地增量獲取主數(shù)據(jù)庫的 binlog,作為自己的binlog,并根據(jù)該binlog中的各操作記錄,對(duì)自身的數(shù)據(jù)執(zhí)行各操作 記錄所記錄的操作(也即,回放該binlog),以實(shí)現(xiàn)主從數(shù)據(jù)庫同步。
[0051] 依據(jù)本發(fā)明的一個(gè)實(shí)施例,在上述步驟S102中,服務(wù)器提取第一數(shù)據(jù)庫日志和第 二數(shù)據(jù)庫日志后,可根據(jù)第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志,更新第二數(shù)據(jù)庫日志。具體 的,服務(wù)器可查找包含在第一數(shù)據(jù)庫日志中,且不包含在第二數(shù)據(jù)庫日志中的操作記錄,然 后,將查找到的各操作記錄并入第二數(shù)據(jù)庫日志中,并將并入后的第二數(shù)據(jù)庫日志作為更 新后的第二數(shù)據(jù)庫日志。顯然,服務(wù)器查找到的這部分操作記錄所對(duì)應(yīng)的操作,即為第一數(shù) 據(jù)庫已執(zhí)行,而第二數(shù)據(jù)庫尚未執(zhí)行的操作。
[0052] 進(jìn)一步的,依據(jù)本發(fā)明的一個(gè)實(shí)施例,查找包含在第一數(shù)據(jù)庫日志中,且不包含在 第二數(shù)據(jù)庫日志中的操作記錄的方法具體可以為:服務(wù)器可在第一數(shù)據(jù)庫日志中,確定生 成時(shí)間距當(dāng)前時(shí)刻最近、且同時(shí)包含在第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志中的操作記錄, 并將確定出的操作記錄的生成時(shí)間作為分界時(shí)間戳,然后,在第一數(shù)據(jù)庫日志中,查找生成 時(shí)間晚于分界時(shí)間戳的操作記錄,作為查找到的包含在第一數(shù)據(jù)庫日志中,且不包含在第 二數(shù)據(jù)庫日志中的操作記錄,也即第一數(shù)據(jù)庫尚未同步給第二數(shù)據(jù)庫的操作記錄。
[0053] 需要說明的是,由于在數(shù)據(jù)庫日志中,是按照生成時(shí)間的順序保存各操作記錄的, 則第一數(shù)據(jù)庫尚未同步給第二數(shù)據(jù)庫的各操作記錄是位于第一數(shù)據(jù)庫日志的尾部且為連 續(xù)的。因此,服務(wù)器確定出的生成時(shí)間距當(dāng)前時(shí)刻最近、且同時(shí)包含在第一數(shù)據(jù)庫日志和第 二數(shù)據(jù)庫日志中的操作記錄,即為:第一數(shù)據(jù)庫當(dāng)前已同步給第二數(shù)據(jù)庫的最后一條操作 記錄。從而,在第一數(shù)據(jù)庫中位于該操作記錄之后的各操作記錄即為:第一數(shù)據(jù)庫尚未同步 給第二數(shù)據(jù)庫的操作記錄。
[0054] 在本發(fā)明實(shí)施例中,對(duì)在第一數(shù)據(jù)庫日志中,確定生成時(shí)間距當(dāng)前時(shí)刻最近、且同 時(shí)包含在第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志中的操作記錄的方法不做限定,在此,僅對(duì)其 中一種可行的方法進(jìn)行說明。
[0055] 服務(wù)器可按照生成時(shí)間從后到先的順序,針對(duì)第一數(shù)據(jù)庫日志中的各操作記錄, 判斷在第二數(shù)據(jù)庫日志中,是否包含有LogID與該操作記錄的LogID相同的操作記錄,若 是,則將該操作記錄確定為在第一數(shù)據(jù)庫日志中的,生成時(shí)間距當(dāng)前時(shí)刻最近、且同時(shí)包 含在第一數(shù)據(jù)庫日志和第二數(shù)據(jù)庫日志中的操作記錄,否則,對(duì)下一條操作記錄重新進(jìn)行 上述判斷,直至判斷結(jié)果為是為止。其中,LogID是在主數(shù)據(jù)庫日志和各從數(shù)據(jù)庫日志中 使用的一個(gè)全局變量,在這些數(shù)據(jù)庫日志中,不同的操作記錄可分別唯一對(duì)應(yīng)一個(gè)不同的 LogID,由服務(wù)器對(duì)LogID進(jìn)行分配和維護(hù)。由于每個(gè)LogID可唯一標(biāo)識(shí)一條操作記錄,因 此,LogID相同的操作記錄即為相同的操作記錄。
[0056] 依據(jù)本發(fā)明的一個(gè)實(shí)施例,服務(wù)器在查找到包含在第一數(shù)據(jù)庫日志中,且不包含 在第二數(shù)據(jù)庫日志中的各操作記錄后,則可將查找到的各操作記錄并入第二數(shù)據(jù)庫日志 中。針對(duì)在實(shí)際應(yīng)用中,可能存在的以下場(chǎng)景進(jìn)行具體分析。
[0057] 第一種場(chǎng)景,在第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫以后,若在第二數(shù)據(jù)庫中尚未執(zhí)行過 數(shù)據(jù)修改操作,則服務(wù)器可直接將查找到的各操作記錄都插入第二數(shù)據(jù)庫日志中。具體的, 服務(wù)器可以將查找到的全部操作記錄和第二數(shù)據(jù)庫日志中已包含的各操作記錄,通過在內(nèi) 存中的重組,按照操作記錄的生成時(shí)間的順序,重新保存在第二數(shù)據(jù)庫日志中。
[0058] 第二種場(chǎng)景,在第二數(shù)據(jù)庫切換為主數(shù)據(jù)庫以后,若第二數(shù)據(jù)庫已經(jīng)執(zhí)行了某些 數(shù)據(jù)修改操作,例如,對(duì)第二數(shù)據(jù)庫中的某個(gè)數(shù)據(jù)項(xiàng)進(jìn)行了賦值操作,在這種場(chǎng)景下,由于 在第一數(shù)據(jù)庫尚未同步給第二數(shù)據(jù)庫的各操作記錄中,可能有操作記錄所對(duì)應(yīng)的操作也是 對(duì)該數(shù)據(jù)項(xiàng)進(jìn)行賦值操作,因此,若后續(xù)將尚未同步的該操作記錄插入第二數(shù)據(jù)庫,進(jìn)而, 回放插入后的第二數(shù)據(jù)庫日志的話,會(huì)使得該數(shù)據(jù)項(xiàng)的取值狀態(tài)不正確(在回放整個(gè)第二 數(shù)據(jù)庫日志的情況下),或者對(duì)該數(shù)據(jù)項(xiàng)進(jìn)行了冗余的賦值操作(在僅回放插入的各操作 記錄的情況下)。
[0059] 因此,在上述的第二種場(chǎng)景下,服務(wù)器可不直接將查找到的各操作記錄都插入第 二數(shù)據(jù)庫日志中,而是針對(duì)查找到的每條操作記錄,確定該操作記錄對(duì)應(yīng)的標(biāo)識(shí),作為待定 標(biāo)識(shí),并在第二數(shù)據(jù)庫日志中,確定生成時(shí)間晚于該操作記錄的生成時(shí)間的各操作記錄對(duì) 應(yīng)的標(biāo)識(shí),作為對(duì)比標(biāo)識(shí),當(dāng)各對(duì)比標(biāo)識(shí)中不存在該待定標(biāo)識(shí)時(shí),根據(jù)該操作記錄的生成時(shí) 間,將該操作記錄插入第二數(shù)據(jù)庫日志中,當(dāng)各對(duì)比標(biāo)識(shí)中存在該待定標(biāo)識(shí)時(shí),則從查找到 的各操作記錄中剔除該操作記錄,后續(xù)也不將該操作記錄插入第二數(shù)據(jù)庫日志中,即,忽略 所述第一數(shù)據(jù)庫日志中所述待定標(biāo)識(shí)對(duì)應(yīng)的操作記錄。
[0060] 在此,對(duì)所述的標(biāo)識(shí)進(jìn)行說明,所述的標(biāo)識(shí)用于對(duì)其對(duì)應(yīng)的操作記錄中包含的SQL 語句所要修改的數(shù)據(jù)項(xiàng)(以下稱為待修改數(shù)據(jù)項(xiàng))進(jìn)行標(biāo)識(shí),由于要修改數(shù)據(jù)時(shí),需先定位 至對(duì)應(yīng)的待修改數(shù)據(jù)項(xiàng),再對(duì)待修改數(shù)據(jù)項(xiàng)進(jìn)行賦值操作,因此,所述的標(biāo)識(shí)可以是定位信 息。又由于在數(shù)據(jù)庫中是以二維表格的形式存儲(chǔ)數(shù)據(jù)的,則若要定位待修改數(shù)據(jù)項(xiàng),其定位 信息至少包括該待修改數(shù)據(jù)項(xiàng)的兩個(gè)屬性,以及其中一個(gè)屬性的值,從而,可定位到該待修 改數(shù)據(jù)項(xiàng)并對(duì)另一個(gè)屬性進(jìn)行賦值操作。
[0061] 根據(jù)上述的說明,所述的標(biāo)識(shí)可以為該定位信息,也即,所述的標(biāo)識(shí)可以包含待修 改數(shù)據(jù)項(xiàng)的兩個(gè)屬性,以及其中一個(gè)屬性的值。本發(fā)明實(shí)施例對(duì)所述的標(biāo)識(shí)的表示格式并 不做限定,在此僅列舉出其中一種可行的表示格式:
[0062] 可將所述的標(biāo)識(shí)表示為一個(gè)二元組{(keyl,valuel),(key2)}。其中keyl和key2 為待修改數(shù)據(jù)項(xiàng)的兩個(gè)屬性,valuel為keyl的取值。舉例進(jìn)行詳細(xì)說明,假定第一數(shù)據(jù)庫 中包含有數(shù)據(jù)表Student,在執(zhí)行數(shù)據(jù)修改操作之前,數(shù)據(jù)表Student如下表1所示:

【權(quán)利要求】
1. 一種數(shù)據(jù)庫同步方法,其特征在于,所述方法應(yīng)用于至少包含第一數(shù)據(jù)庫和第二數(shù) 據(jù)庫的數(shù)據(jù)系統(tǒng),所述第一數(shù)據(jù)庫由主數(shù)據(jù)庫切換為從數(shù)據(jù)庫,所述第二數(shù)據(jù)庫由從數(shù)據(jù) 庫切換為主數(shù)據(jù)庫,所述方法包括: 在所述第一數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,提取所述第一數(shù)據(jù)庫的第一數(shù)據(jù)庫日志和所述 第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志; 根據(jù)所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志,更新所述第二數(shù)據(jù)庫日志; 根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)所述第二數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行 同步操作。
2. 如權(quán)利要求1所述的方法,其特征在于,所述日志至少包括二進(jìn)制日志binlog。
3. 如權(quán)利要求1所述的方法,其特征在于,根據(jù)所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù) 庫日志,更新所述第二數(shù)據(jù)庫日志,包括: 查找包含在所述第一數(shù)據(jù)庫日志中,且不包含在所述第二數(shù)據(jù)庫日志中的操作記錄; 將查找到的各操作記錄并入所述第二數(shù)據(jù)庫日志中,并將并入后的第二數(shù)據(jù)庫日志作 為更新后的第二數(shù)據(jù)庫日志。
4. 如權(quán)利要求3所述的方法,其特征在于,查找包含在所述第一數(shù)據(jù)庫日志中,且不包 含在所述第二數(shù)據(jù)庫日志中的操作記錄,包括: 在所述第一數(shù)據(jù)庫日志中,確定生成時(shí)間距當(dāng)前時(shí)刻最近、且同時(shí)包含在所述第一數(shù) 據(jù)庫日志和所述第二數(shù)據(jù)庫日志中的操作記錄; 將確定出的操作記錄的生成時(shí)間作為分界時(shí)間戳; 在所述第一數(shù)據(jù)庫日志中,查找生成時(shí)間晚于所述分界時(shí)間戳的操作記錄。
5. 如權(quán)利要求3所述的方法,其特征在于,將查找到的各操作記錄并入所述第二數(shù)據(jù) 庫日志中,包括: 針對(duì)查找到的每條操作記錄,確定該操作記錄對(duì)應(yīng)的標(biāo)識(shí),作為待定標(biāo)識(shí); 在所述第二數(shù)據(jù)庫日志中,確定生成時(shí)間晚于該操作記錄的生成時(shí)間的各操作記錄對(duì) 應(yīng)的標(biāo)識(shí),作為對(duì)比標(biāo)識(shí); 當(dāng)各對(duì)比標(biāo)識(shí)中不存在所述待定標(biāo)識(shí)時(shí),根據(jù)該操作記錄的生成時(shí)間,將該操作記錄 插入所述第二數(shù)據(jù)庫日志中。
6. 如權(quán)利要求5所述的方法,其特征在于,當(dāng)各對(duì)比標(biāo)識(shí)中存在所述待定標(biāo)識(shí)時(shí),忽略 所述第一數(shù)據(jù)庫日志中所述待定標(biāo)識(shí)對(duì)應(yīng)的操作記錄。
7. 如權(quán)利要求3所述的方法,其特征在于,根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各 操作記錄,對(duì)所述第二數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行同步操作,包括: 針對(duì)并入所述第二數(shù)據(jù)庫日志中的每條操作記錄,提取該操作記錄中包含的操作指 令,并在所述第二數(shù)據(jù)庫上執(zhí)行該操作指令。
8. -種數(shù)據(jù)庫同步裝置,其特征在于,所述裝置應(yīng)用于至少包含第一數(shù)據(jù)庫和第二數(shù) 據(jù)庫的數(shù)據(jù)系統(tǒng),所述第一數(shù)據(jù)庫由主數(shù)據(jù)庫切換為從數(shù)據(jù)庫,所述第二數(shù)據(jù)庫由從數(shù)據(jù) 庫切換為主數(shù)據(jù)庫,所述裝置包括: 提取模塊,用于在所述第一數(shù)據(jù)庫切換為從數(shù)據(jù)庫后,提取所述第一數(shù)據(jù)庫的第一數(shù) 據(jù)庫日志和所述第二數(shù)據(jù)庫的第二數(shù)據(jù)庫日志; 更新模塊,用于根據(jù)所述第一數(shù)據(jù)庫日志和所述第二數(shù)據(jù)庫日志,更新所述第二數(shù)據(jù) 庫日志; 同步模塊,用于根據(jù)更新后的第二數(shù)據(jù)庫日志中包含的各操作記錄,對(duì)所述第二數(shù)據(jù) 庫中的數(shù)據(jù)進(jìn)行同步操作。
9. 如權(quán)利要求8所述的裝置,其特征在于,所述日志至少包括二進(jìn)制日志binlog。
10. 如權(quán)利要求8所述的裝置,其特征在于,所述更新模塊進(jìn)一步用于,查找包含在所 述第一數(shù)據(jù)庫日志中,且不包含在所述第二數(shù)據(jù)庫日志中的操作記錄,將查找到的各操作 記錄并入所述第二數(shù)據(jù)庫日志中,并將并入后的第二數(shù)據(jù)庫日志作為更新后的第二數(shù)據(jù)庫 日志。
【文檔編號(hào)】G06F17/30GK104346479SQ201410696885
【公開日】2015年2月11日 申請(qǐng)日期:2014年11月26日 優(yōu)先權(quán)日:2014年11月26日
【發(fā)明者】陳宗志, 王超, 陳磊, 陳營, 李明昊 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
大港区| 双城市| 三穗县| 嘉祥县| 德庆县| 延津县| 屏南县| 县级市| 玉林市| 无棣县| 腾冲县| 嘉善县| 龙口市| 泰和县| 金阳县| 大宁县| 沙湾县| 河北区| 当雄县| 沾益县| 邢台市| 马尔康县| 剑阁县| 福州市| 三江| 阿拉善左旗| 尼木县| 宜兰县| 日喀则市| 凉山| 鹤山市| 嘉祥县| 深水埗区| 长春市| 治多县| 辉县市| 阿荣旗| 大渡口区| 甘孜县| 德安县| 台中县|