本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,具體而言,涉及一種數(shù)據(jù)快照的恢復(fù)方法及裝置。
背景技術(shù):
目前業(yè)內(nèi)的主流的數(shù)據(jù)庫(kù)是單機(jī)數(shù)據(jù)庫(kù)(Oracle、DB2、MySQL等),而隨著數(shù)據(jù)量膨脹,單機(jī)數(shù)據(jù)庫(kù)越來(lái)越不能滿(mǎn)足用戶(hù)對(duì)于大存儲(chǔ)和高性能的需求,分布式數(shù)據(jù)庫(kù)的應(yīng)用逐漸廣泛起來(lái)。
相關(guān)技術(shù)中分布式數(shù)據(jù)庫(kù)恢復(fù)歷史時(shí)刻的數(shù)據(jù)庫(kù)快照有兩種主要方案:
方案一:在單節(jié)點(diǎn)使用備份工具進(jìn)行邏輯備份恢復(fù)或是直接進(jìn)行磁盤(pán)鏡像備份并日常歸檔事務(wù)日志。利用備份數(shù)據(jù)恢復(fù)出各個(gè)節(jié)點(diǎn)備份數(shù)據(jù)后,各個(gè)節(jié)點(diǎn)分別利用事務(wù)日志重做到指定時(shí)刻。
該方案一存在的問(wèn)題是:(1)不能保證恢復(fù)出的任意指定時(shí)刻數(shù)據(jù)庫(kù)快照的全局一致性,因?yàn)椴捎玫氖歉鱾€(gè)節(jié)點(diǎn)分別備份恢復(fù)的方法,不采取任何機(jī)制去保證分布式數(shù)據(jù)庫(kù)全局一致性;(2)在備份過(guò)程中對(duì)在線業(yè)務(wù)的性能影響很大,邏輯備份以文件為單位進(jìn)行備份,多了查找等操作,降低了磁盤(pán)的吞吐量,備份效率較低;(3)利用鏡像恢復(fù)數(shù)據(jù)庫(kù)花費(fèi)時(shí)間非常的長(zhǎng)。
方案二:利用分布式事務(wù)管理器,在分布式數(shù)據(jù)庫(kù)備份的時(shí)候做協(xié)調(diào),只備份單節(jié)點(diǎn)事務(wù)和各個(gè)節(jié)點(diǎn)均成功提交的分布式事務(wù)。這只能保證在備份過(guò)程中和備份結(jié)束時(shí)刻的備份數(shù)據(jù)處于全局事務(wù)一致性(即恢復(fù)該時(shí)間段中的數(shù)據(jù)庫(kù)快照才能處于全局事務(wù)一致性狀態(tài))。若要求恢復(fù)到任意時(shí)刻,則必須依賴(lài)事務(wù)日志和分布式事務(wù)管理器,在回放過(guò)程中通過(guò)資源池、加鎖等機(jī)制實(shí)現(xiàn)回放過(guò)程中每一刻全局事務(wù)一致性。
該方案二存在的問(wèn)題是:在備份過(guò)程中時(shí)刻控制數(shù)據(jù)一致性,導(dǎo)致性能下降,對(duì)在線業(yè)務(wù)的影響很大,在重做事務(wù)日志過(guò)程中也保證每一刻的數(shù)據(jù)一致性,需要對(duì)資源加鎖,導(dǎo)致回放速度非常慢。
針對(duì)相關(guān)技術(shù)中分布式數(shù)據(jù)庫(kù)恢復(fù)歷史時(shí)刻的數(shù)據(jù)庫(kù)快照不能恢復(fù)出任意指定時(shí)刻且滿(mǎn)足全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照的問(wèn)題,目前尚未存在有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種數(shù)據(jù)快照的恢復(fù)方法及裝置,以至少解決相關(guān)技術(shù)中分布式數(shù)據(jù)庫(kù)恢復(fù)歷史時(shí)刻的數(shù)據(jù)庫(kù)快照不能恢復(fù)出任意指定時(shí)刻且滿(mǎn)足全局事務(wù)一致性的數(shù)據(jù) 庫(kù)快照的問(wèn)題。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)快照的恢復(fù)方法,包括:分布式數(shù)據(jù)庫(kù)中的集群管理器將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);所述集群管理器基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中的事務(wù)所指示的操作得到在所述指定時(shí)刻所述各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,其中,所述事務(wù)日志為所述物理備份結(jié)束時(shí)刻至所述指定時(shí)刻之間歸檔的對(duì)數(shù)據(jù)進(jìn)行的操作。
進(jìn)一步地,所述分布式數(shù)據(jù)庫(kù)中的集群管理器將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)包括:所述集群管理器獲取在所述指定時(shí)刻之前最近一次獲取的所述各個(gè)節(jié)點(diǎn)的活躍事務(wù)列表快照,其中,所述活躍事務(wù)列表快照中記錄有在所述指定時(shí)刻與所述集群管理器連接的一個(gè)或多個(gè)節(jié)點(diǎn)上正在活躍的用于操作數(shù)據(jù)的事務(wù);所述集群管理器查找所述活躍事務(wù)列表中最先開(kāi)始的活躍事務(wù)的開(kāi)始時(shí)刻;在所述開(kāi)始時(shí)刻小于所述物理備份結(jié)束時(shí)刻時(shí),所述集群管理器對(duì)所述活躍事務(wù)列表快照中在所述物理備份結(jié)束時(shí)刻之前仍活躍的事務(wù)進(jìn)行回滾得到所述最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);在所述開(kāi)始時(shí)刻大于所述物理備份結(jié)束時(shí)刻時(shí),所述集群管理器獲取所述各個(gè)節(jié)點(diǎn)在指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)。
進(jìn)一步地,所述集群管理器基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中的事務(wù)所指示的操作得到所述指定時(shí)刻所述各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照包括:所述集群管理器基于所述最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照所述事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中事務(wù)所指示的所述各個(gè)節(jié)點(diǎn)的單機(jī)事務(wù)操作,以及按照在所述物理備份結(jié)束時(shí)刻到所述指定時(shí)刻之間所述事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中事務(wù)所指示的分布式事務(wù)操作得到所述指定時(shí)刻所述各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照。
進(jìn)一步地,在分布式數(shù)據(jù)庫(kù)中的集群管理器將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,所述方法還包括:所述集群管理器周期性向與所述集群管理器連接的各個(gè)節(jié)點(diǎn)發(fā)送物理備份指令,其中,所述物理備份指令包括:全量備份指令和/或增量備份指令。
進(jìn)一步地,在分布式數(shù)據(jù)庫(kù)中的集群管理器將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,所述方法還包括:所述集群管理器周期性對(duì)所述各個(gè)節(jié)點(diǎn)執(zhí)行快照操作得到所述活躍事務(wù)列表快照。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種數(shù)據(jù)快照的恢復(fù)裝置,應(yīng)用于分布式數(shù)據(jù)庫(kù)中的集群管理器側(cè),包括:恢復(fù)模塊,用于將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);重做模塊,用于基于最近一次 物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中的事務(wù)所指示的操作得到在所述指定時(shí)刻所述各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,其中,所述事務(wù)日志為所述物理備份結(jié)束時(shí)刻至所述指定時(shí)刻之間歸檔的對(duì)數(shù)據(jù)進(jìn)行的操作。
進(jìn)一步地,所述恢復(fù)模塊包括:第一獲取單元,用于獲取在所述指定時(shí)刻之前最近一次獲取的所述各個(gè)節(jié)點(diǎn)的活躍事務(wù)列表快照,其中,所述活躍事務(wù)列表快照中記錄有在所述指定時(shí)刻與所述集群管理器連接的一個(gè)或多個(gè)節(jié)點(diǎn)上正在活躍的用于操作數(shù)據(jù)的事務(wù);查找單元,用于查找所述活躍事務(wù)列表中最先開(kāi)始的活躍事務(wù)的開(kāi)始時(shí)刻;回滾單元,用于在所述開(kāi)始時(shí)刻小于所述物理備份結(jié)束時(shí)刻時(shí),對(duì)所述活躍事務(wù)列表快照中在所述物理備份結(jié)束時(shí)刻之前仍活躍的事務(wù)進(jìn)行回滾得到所述最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);第二獲取單元,用于在所述開(kāi)始時(shí)刻大于所述物理備份結(jié)束時(shí)刻時(shí),獲取所述各個(gè)節(jié)點(diǎn)在指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)。
進(jìn)一步地,所述重做模塊,還用于基于所述最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照所述事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中事務(wù)所指示的所述各個(gè)節(jié)點(diǎn)的單機(jī)事務(wù)操作,以及按照在所述物理備份結(jié)束時(shí)刻到所述指定時(shí)刻之間所述事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做所述事務(wù)日志中事務(wù)所指示的分布式事務(wù)操作得到所述指定時(shí)刻所述各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照。
進(jìn)一步地,在分布式數(shù)據(jù)庫(kù)中的集群管理器將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,所述裝置還包括:發(fā)送模塊,用于周期性向與所述集群管理器連接的各個(gè)節(jié)點(diǎn)發(fā)送物理備份指令,其中,所述物理備份指令包括:全量備份指令和/或增量備份指令。
進(jìn)一步地,在分布式數(shù)據(jù)庫(kù)中的集群管理器將與所述集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,所述裝置還包括:執(zhí)行模塊,用于周期性對(duì)所述各個(gè)節(jié)點(diǎn)執(zhí)行快照操作得到所述活躍事務(wù)列表快照。
通過(guò)本發(fā)明,采用在分布式數(shù)據(jù)庫(kù)中的集群管理器中將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù),并基于該數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中的事務(wù)所指示的操作得到在指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,即在本實(shí)施例中采用基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志事務(wù)重做得到各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,從而使得該快照滿(mǎn)足了全局一致性,進(jìn)而解決了相關(guān)技術(shù)中分布式數(shù)據(jù)庫(kù)恢復(fù)歷史時(shí)刻的數(shù)據(jù)庫(kù)快照不能恢復(fù)出任意指定時(shí)刻且滿(mǎn)足全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照的問(wèn)題。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)方法的流程圖;
圖2是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的結(jié)構(gòu)框圖;
圖3是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的可選結(jié)構(gòu)框圖一;
圖4是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的可選結(jié)構(gòu)框圖二;
圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的可選結(jié)構(gòu)框圖三;
圖6是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)庫(kù)快照恢復(fù)系統(tǒng)的示意圖;
圖7是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)庫(kù)快照恢復(fù)方法的流程圖;
圖8是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)庫(kù)快照恢復(fù)的時(shí)間圖。
具體實(shí)施方式
下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。
在本實(shí)施例中提供了一種數(shù)據(jù)快照的恢復(fù)方法,圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)方法的流程圖,如圖1所示,該流程包括如下步驟:
步驟S102,分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);
步驟S104,集群管理器基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中的事務(wù)所指示的操作得到在指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,其中,事務(wù)日志為物理備份結(jié)束時(shí)刻至指定時(shí)刻之間歸檔的對(duì)數(shù)據(jù)進(jìn)行的操作。
由本實(shí)施例的上述步驟S102至步驟S104可知,在分布式數(shù)據(jù)庫(kù)中的集群管理器中將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù),并基于該數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中的事務(wù)所指示的操作得到在指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,即在本實(shí)施例中采用基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志事務(wù)重做得到各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,從而使得該快照滿(mǎn)足了全局一致性,進(jìn)而解決了相關(guān)技術(shù)中分布式數(shù)據(jù)庫(kù)恢復(fù)歷史時(shí)刻的數(shù)據(jù)庫(kù)快照不能恢復(fù)出任意指定時(shí)刻且滿(mǎn)足全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照的問(wèn)題。
對(duì)于本實(shí)施例中上述步驟S102中涉及到的分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù) 的方式,在本實(shí)施例的可選實(shí)施方式中,可以通過(guò)如下方式來(lái)實(shí)現(xiàn):
步驟S102-1:集群管理器獲取在指定時(shí)刻之前最近一次獲取的各個(gè)節(jié)點(diǎn)的活躍事務(wù)列表快照,其中,活躍事務(wù)列表快照中記錄有在指定時(shí)刻與集群管理器連接的一個(gè)或多個(gè)節(jié)點(diǎn)上正在活躍的用于操作數(shù)據(jù)的事務(wù);
步驟S102-2:集群管理器查找活躍事務(wù)列表中最先開(kāi)始的活躍事務(wù)的開(kāi)始時(shí)刻;
步驟S102-3:在開(kāi)始時(shí)刻小于物理備份結(jié)束時(shí)刻時(shí),集群管理器對(duì)活躍事務(wù)列表快照中在物理備份結(jié)束時(shí)刻之前仍活躍的事務(wù)進(jìn)行回滾得到最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);
步驟S102-4:在開(kāi)始時(shí)刻大于物理備份結(jié)束時(shí)刻時(shí),集群管理器獲取各個(gè)節(jié)點(diǎn)在指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)。
需要說(shuō)明的是,對(duì)于上述步驟S102-1中涉及到的活躍事務(wù)列表,是通過(guò)周期性進(jìn)行獲取的,而獲取到的活躍事務(wù)列表中的最早開(kāi)始的活躍事務(wù)可以是在物理備份結(jié)束時(shí)刻之前或物理備份之后,進(jìn)而根據(jù)不同的情況分別獲取對(duì)應(yīng)的事務(wù)日志。
對(duì)于本實(shí)施例中步驟S104中涉及到的集群管理器基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中的事務(wù)所指示的操作得到在指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照的方式,在本實(shí)施例的可選實(shí)施方式中,可以通過(guò)如下方式來(lái)實(shí)現(xiàn):
集群管理器基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中事務(wù)所指示的各個(gè)節(jié)點(diǎn)的單機(jī)事務(wù)操作,以及按照在物理備份結(jié)束時(shí)刻到指定時(shí)刻之間事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中事務(wù)所指示的分布式事務(wù)操作得到指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照。
也就是說(shuō),在活躍事務(wù)列表中最先開(kāi)始的活躍事務(wù)是在物理備份結(jié)束之前時(shí),在得到指定時(shí)刻的數(shù)據(jù)庫(kù)快照時(shí),需要對(duì)活躍事務(wù)列表中在開(kāi)始時(shí)刻到物理備份結(jié)束時(shí)刻之間活躍事務(wù)進(jìn)行回滾,這樣才能保證物理備份結(jié)束前的快照的全局一致性,而對(duì)于物理備份結(jié)束之后到指定時(shí)刻的快照,只需要根據(jù)該段時(shí)間的事務(wù)日志進(jìn)行前滾就能得到全局一致性的數(shù)據(jù)快照。
而在本實(shí)施例的步驟S102分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,本實(shí)施例的方法還可以包括:集群管理器周期性向與集群管理器連接的各個(gè)節(jié)點(diǎn)發(fā)送物理備份指令,其中,物理備份指令包括:全量備份指令和/或增量備份指令,通過(guò)本實(shí)施例的該備份方式,執(zhí)行備份和恢復(fù)較邏輯備份都要快很多。除此之外,采取全量加增量的方式備份數(shù)據(jù)庫(kù),恢復(fù)的時(shí)候只需要一份全量的備份數(shù)據(jù)和一份增量的備份數(shù)據(jù)就可快速恢復(fù)數(shù)據(jù)庫(kù),而采用對(duì)數(shù)據(jù)庫(kù)物理備份的方式,在備份過(guò)程中只是拷貝數(shù)據(jù)庫(kù)文件,對(duì)在線業(yè) 務(wù)影響極小。
而在本實(shí)施例的步驟S102分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,本實(shí)施例的方法還可以包括:集群管理器周期性對(duì)各個(gè)節(jié)點(diǎn)執(zhí)行快照操作得到活躍事務(wù)列表快照
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤(pán))中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例的方法。
在本實(shí)施例中還提供了一種數(shù)據(jù)庫(kù)快照的恢復(fù)裝置,該裝置用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí)施方式,已經(jīng)進(jìn)行過(guò)說(shuō)明的不再贅述。如以下所使用的,術(shù)語(yǔ)“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的裝置較佳地以軟件來(lái)實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。
圖2是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的結(jié)構(gòu)框圖,應(yīng)用于分布式數(shù)據(jù)庫(kù)中的集群管理器中,如圖2所示,該裝置包括:恢復(fù)模塊22,用于將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);重做模塊24,與恢復(fù)模塊22耦合連接,用于基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中的事務(wù)所指示的操作得到在指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,其中,事務(wù)日志為物理備份結(jié)束時(shí)刻至指定時(shí)刻之間歸檔的對(duì)數(shù)據(jù)進(jìn)行的操作。
圖3是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的可選結(jié)構(gòu)框圖一,如圖3所示,恢復(fù)模塊22包括:第一獲取單元32,用于獲取在指定時(shí)刻之前最近一次獲取的各個(gè)節(jié)點(diǎn)的活躍事務(wù)列表快照,其中,活躍事務(wù)列表快照中記錄有在指定時(shí)刻與集群管理器連接的一個(gè)或多個(gè)節(jié)點(diǎn)上正在活躍的用于操作數(shù)據(jù)的事務(wù);查找單元34,與第一獲取單元32耦合連接,用于查找活躍事務(wù)列表中最先開(kāi)始的活躍事務(wù)的開(kāi)始時(shí)刻;回滾單元36,與查找單元34耦合連接,用于在開(kāi)始時(shí)刻小于物理備份結(jié)束時(shí)刻時(shí),對(duì)活躍事務(wù)列表快照中在物理備份結(jié)束時(shí)刻之前仍活躍的事務(wù)進(jìn)行回滾得到最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);第二獲取單元38,與回滾單元36耦合連接,用于在開(kāi)始時(shí)刻大于物理備份結(jié)束時(shí)刻時(shí),獲取各個(gè)節(jié)點(diǎn)在指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)。
基于圖3中恢復(fù)模塊22中的單元,本實(shí)施例中涉及到的重做模塊24,還用于基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中事務(wù)所指示的各個(gè)節(jié)點(diǎn)的單機(jī)事務(wù)操作,以及按照在物理備份結(jié)束時(shí)刻到指定時(shí)刻之間事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中事務(wù)所指示的分布式事務(wù) 操作得到指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照
圖4是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的可選結(jié)構(gòu)框圖二,如圖4所示,在分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,裝置還包括:發(fā)送模塊42,與恢復(fù)模塊22耦合連接,用于周期性向與集群管理器連接的各個(gè)節(jié)點(diǎn)發(fā)送物理備份指令,其中,物理備份指令包括:全量備份指令和/或增量備份指令。
圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)快照的恢復(fù)裝置的可選結(jié)構(gòu)框圖三,如圖5所示,在分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)之前,裝置還包括:執(zhí)行模塊52,與恢復(fù)模塊22耦合連接,用于周期性對(duì)各個(gè)節(jié)點(diǎn)執(zhí)行快照操作得到活躍事務(wù)列表快照。
需要說(shuō)明的是,上述各個(gè)模塊是可以通過(guò)軟件或硬件來(lái)實(shí)現(xiàn)的,對(duì)于后者,可以通過(guò)以下方式實(shí)現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述模塊分別位于多個(gè)處理器中。
下面結(jié)合本發(fā)明的可選實(shí)施例對(duì)本發(fā)明進(jìn)行舉例說(shuō)明;
本可選實(shí)施例采用了基于定期的分布式數(shù)據(jù)庫(kù)物理備份(包括全量備份和增量備份)、日常歸檔的事務(wù)日志、按照某種頻率抓取的活躍事務(wù)列表快照,這3種基礎(chǔ)數(shù)據(jù)來(lái)可恢復(fù)出任意指定時(shí)刻且滿(mǎn)足全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照,并且以上所有過(guò)程均對(duì)在線業(yè)務(wù)不產(chǎn)生影響。即本實(shí)施例中采用的是在單節(jié)點(diǎn)恢復(fù)的數(shù)據(jù)上,做全局一致性的處理。
對(duì)于本可選實(shí)施例中涉及到的快照時(shí)刻非正常結(jié)束的分布式事務(wù)引發(fā)的全局?jǐn)?shù)據(jù)一致性問(wèn)題場(chǎng)景包括:(1)存在部分節(jié)點(diǎn)提交成功而部分節(jié)點(diǎn)還未提交的分布式事務(wù);(2)存在分布式事務(wù)在部分節(jié)點(diǎn)中提交成功而部分節(jié)點(diǎn)提交失敗,且分布式數(shù)據(jù)庫(kù)還未將提交成功的節(jié)點(diǎn)中該事務(wù)回滾;(3)存在所有節(jié)點(diǎn)均未提交或提交失敗的事務(wù)。
此外,在本可選實(shí)施例中采用物理熱備份的方法獲取數(shù)據(jù)庫(kù)備份,對(duì)結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL的執(zhí)行幾乎不產(chǎn)生負(fù)面影響,并且利用一次全量和一次增量備份數(shù)據(jù),可以快速恢復(fù)出備份數(shù)據(jù)。
圖6是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)庫(kù)快照恢復(fù)系統(tǒng)的示意圖,如圖6所示,該系統(tǒng)包括:Data Node Cluster:數(shù)據(jù)節(jié)點(diǎn)集群,用于對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ);SQL Node Cluster:SQL節(jié)點(diǎn)集群,用于SQL拆分和解析;全局事務(wù)協(xié)調(diào)器GTM(Global Transaction Manager):用于管理全局事務(wù)。Cluster Manager:集群管理器,用于管理Data Node Cluster和SQL Node Cluster。
基于圖6中該系統(tǒng)的組成部分,圖7是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)庫(kù)快照恢復(fù)方法的流程圖,如圖7所示,該方法的步驟包括:
步驟S41,獲取活躍事務(wù)列表快照;
步驟S42,物理熱備份數(shù)據(jù)庫(kù);
步驟S43,定時(shí)歸檔事務(wù)日志;
也就說(shuō),上述步驟S41至步驟S43是用來(lái)生成基礎(chǔ)數(shù)據(jù),Cluster Manager定期根據(jù)備份策略給各個(gè)節(jié)點(diǎn)下發(fā)全量或增量備份命令,Cluster Manager定時(shí)(可配置)向GTM獲取活躍事務(wù)列表快照并持久化到磁盤(pán)文件(活躍事務(wù)列表文件)中;數(shù)據(jù)庫(kù)節(jié)點(diǎn)定期歸檔數(shù)據(jù)庫(kù)的事務(wù)日志。
該方法還包括:
步驟S44,獲取備份數(shù)據(jù)庫(kù)文件、日志文件和活躍事務(wù)列表文件;
步驟S45,恢復(fù)單節(jié)點(diǎn)一致性數(shù)據(jù);
步驟S46,恢復(fù)全局一致性數(shù)據(jù);
也就是說(shuō),該步驟S44至步驟S46是指恢復(fù)到任意指定時(shí)刻分布式數(shù)據(jù)庫(kù)快照,其中,對(duì)每個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),根據(jù)全量+增量備份數(shù)據(jù),把單節(jié)點(diǎn)數(shù)據(jù)庫(kù)恢復(fù)到備份結(jié)束時(shí)刻的數(shù)據(jù)一致性狀態(tài)。從活躍事務(wù)列表文件中檢索到指定時(shí)刻的活躍事務(wù)列表快照,并取出對(duì)應(yīng)的歸檔事務(wù)日志。根據(jù)活躍事務(wù)列表快照和事務(wù)日志,前滾或回滾從備份時(shí)刻到指定時(shí)刻的所有數(shù)據(jù)庫(kù)事務(wù),使得該快照滿(mǎn)足分布式數(shù)據(jù)庫(kù)的全局一致性。
通過(guò)本可選實(shí)施例采用對(duì)數(shù)據(jù)庫(kù)物理熱備份的方式,備份和恢復(fù)較邏輯備份都要快很多。除此之外,本可選實(shí)施例采取全量加增量的方式備份數(shù)據(jù)庫(kù),恢復(fù)的時(shí)候只需要一份全量的備份數(shù)據(jù)和一份增量的備份數(shù)據(jù)就可快速恢復(fù)數(shù)據(jù)庫(kù)。本可選實(shí)施例采用對(duì)數(shù)據(jù)庫(kù)物理熱備份的方式,在備份過(guò)程中只是拷貝數(shù)據(jù)庫(kù)文件,對(duì)在線業(yè)務(wù)影響極小。另外,使得數(shù)據(jù)庫(kù)快照能夠滿(mǎn)足全局事務(wù)一致性,在該指定時(shí)刻的數(shù)據(jù)庫(kù)快照,不存在部分?jǐn)?shù)據(jù)節(jié)點(diǎn)已提交,部分?jǐn)?shù)據(jù)節(jié)點(diǎn)未提交或提交失敗的事務(wù)??梢曰謴?fù)任意指定時(shí)刻(以獲取活躍事務(wù)列表周期為粒度)的數(shù)據(jù)庫(kù)快照。
下面結(jié)合本發(fā)明的具體實(shí)施例對(duì)本可選實(shí)施例進(jìn)行詳細(xì)的說(shuō)明,需要說(shuō)明的是以下可選實(shí)施例都是結(jié)合圖8進(jìn)行相應(yīng)的說(shuō)明,圖8是根據(jù)本發(fā)明可選實(shí)施例的數(shù)據(jù)庫(kù)快照恢復(fù)的時(shí)間圖;
可選實(shí)施例一:
該可選實(shí)施例以以MariaDB分布式系統(tǒng)為例,獲得數(shù)據(jù)庫(kù)數(shù)據(jù)一致性快照方法的步驟包括:初始基礎(chǔ)數(shù)據(jù)生成過(guò)程包括步驟S201至步驟S203,而基于初始基礎(chǔ)數(shù)據(jù)恢復(fù)指定時(shí)刻t7的數(shù)據(jù)庫(kù)快照的步驟包括步驟S204至步驟S211。
步驟S201,開(kāi)啟分布式數(shù)據(jù)庫(kù)和管理程序(ClusterManager,GTM),該時(shí)間點(diǎn)為 t0,從t0時(shí)刻開(kāi)始,ClusterManager定期向GTM獲取活躍事務(wù)列表快照,寫(xiě)入文件,并持久化。
步驟S202,在t1時(shí)刻,Cluster Manager根據(jù)備份策略和上次備份的結(jié)果文件,分別向數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)起備份請(qǐng)求,節(jié)點(diǎn)1的備份結(jié)束時(shí)刻為t3,節(jié)點(diǎn)2的備份結(jié)束時(shí)刻為t4,節(jié)點(diǎn)3的備份結(jié)束時(shí)刻為t5。備份結(jié)束后各個(gè)節(jié)點(diǎn)以備份開(kāi)始時(shí)間命名備份數(shù)據(jù)并返回備份結(jié)果,Cluster Manager記入結(jié)果文件并持久化。
步驟S203,數(shù)據(jù)節(jié)點(diǎn)日常歸檔事務(wù)日志文件,Cluster Manager歸檔活躍事務(wù)列表快照文件,其中,該歸檔周期可配置。
步驟S204,獲取備份結(jié)果文件,并分析結(jié)果文件,之后獲取t7時(shí)刻之前的最近一次備份數(shù)據(jù)即t1時(shí)刻備份的數(shù)據(jù)文件;
步驟S205,用物理熱備份工具分別恢復(fù)各個(gè)節(jié)點(diǎn)備份數(shù)據(jù),節(jié)點(diǎn)1恢復(fù)到時(shí)刻t3。
步驟S206,根據(jù)活躍事務(wù)列表快照文件中的記錄匹配出指定時(shí)刻t7之前最近一次獲取活躍事務(wù)列表快照的時(shí)刻t6,其中,恢復(fù)快照的粒度為獲取活躍事務(wù)列表快照的周期;
步驟S207,分析t6時(shí)刻的活躍事務(wù)列表,得到該活躍事務(wù)列表中最先開(kāi)始的事務(wù)的開(kāi)始時(shí)間t2;
步驟S208,獲取該節(jié)點(diǎn)時(shí)間為[tmin,tmax]的事務(wù)日志;
其中,tmin=min{t2,t3},tmax=t7;
步驟S209,當(dāng)tmin小于t3時(shí),使用工具生成[tmin,t3]之間的在t6時(shí)刻仍活躍的分布式事務(wù)的回滾語(yǔ)句;當(dāng)tmin不小于t3時(shí),忽略該步驟;
步驟S210,使用工具重做[t3,t6]之間所有的單機(jī)事務(wù)和在集合:{gtid在t6時(shí)刻活躍事務(wù)列表中不存在}∩{小于t6時(shí)刻的next_gtid}中的所有分布式事務(wù);
步驟S211,執(zhí)行生成的回滾語(yǔ)句。
可選實(shí)施例二:
該可選實(shí)施例的應(yīng)用場(chǎng)景為:基于MySQL分布式集群數(shù)據(jù)庫(kù)的在線支付系統(tǒng)災(zāi)難恢復(fù);
在本可選實(shí)施例中,使用物理熱備份工具備份單節(jié)點(diǎn)數(shù)據(jù),ClusterManager定期向GTM獲取活躍事務(wù)列表數(shù)據(jù)快照,并且日常歸檔binlog日志。恢復(fù)時(shí),獲取單節(jié)點(diǎn)備份數(shù)據(jù)、binlog日志和活躍事務(wù)列表快照,進(jìn)行恢復(fù)、回滾和重做的操作,從而得到指定時(shí)刻或備份時(shí)刻全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照且不影響大數(shù)據(jù)量的在線支付系統(tǒng)正常運(yùn)行,該可選實(shí)施例的步驟包括:
步驟S301,開(kāi)啟分布式數(shù)據(jù)庫(kù)和管理程序(ClusterManager,GTM),該時(shí)間點(diǎn)為t0,從t0時(shí)刻開(kāi)始,ClusterManager定期向GTM獲取活躍事務(wù)列表快照,寫(xiě)入文件,并持久化。
步驟S302,在t1時(shí)刻,Cluster Manager根據(jù)備份策略和上次備份的結(jié)果文件,分別向數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)起備份請(qǐng)求,節(jié)點(diǎn)1的備份結(jié)束時(shí)刻為t3,節(jié)點(diǎn)2的備份結(jié)束時(shí)刻為t4,節(jié)點(diǎn)3的備份結(jié)束時(shí)刻為t5。備份結(jié)束后各個(gè)節(jié)點(diǎn)以備份開(kāi)始時(shí)間命名備份數(shù)據(jù)并返回備份結(jié)果,Cluster Manager記入結(jié)果文件并持久化。
步驟S303,數(shù)據(jù)節(jié)點(diǎn)日常歸檔事務(wù)日志文件,Cluster Manager歸檔活躍事務(wù)列表快照文件,其中,歸檔周期可以為10分鐘。
對(duì)于本可選實(shí)施例中涉及到的恢復(fù)數(shù)據(jù)庫(kù)快照,要求在其他生產(chǎn)環(huán)境或者中間機(jī)器恢復(fù)該集群數(shù)據(jù)庫(kù)t7時(shí)刻快照,該恢復(fù)的步驟包括:
步驟S304,獲取備份結(jié)果文件,并分析結(jié)果文件,之后獲取t7時(shí)刻之前的最近一次備份數(shù)據(jù)即t1時(shí)刻備份的數(shù)據(jù)文件;
步驟S305,若需要恢復(fù)到最近十分鐘之內(nèi)的數(shù)據(jù),則還需要手動(dòng)將還未來(lái)得及歸檔的事務(wù)日志拷貝到目標(biāo)機(jī)器;
步驟S306,用物理熱備份工具分別恢復(fù)各個(gè)節(jié)點(diǎn)備份數(shù)據(jù),新節(jié)點(diǎn)1恢復(fù)到時(shí)刻t3;
步驟S307,根據(jù)活躍事務(wù)列表快照文件中的記錄匹配出指定時(shí)刻t7之前最近一次獲取活躍事務(wù)列表快照的時(shí)刻t6。(恢復(fù)快照的粒度為獲取活躍事務(wù)列表快照的周期)
步驟S308,分析t6時(shí)刻的活躍事務(wù)列表,得到該活躍事務(wù)列表中最先開(kāi)始的事務(wù)的開(kāi)始時(shí)間t2。
步驟S309,獲取該節(jié)點(diǎn)時(shí)間為[tmin,tmax]的事務(wù)日志;
其中,tmin=min{t2,t3},tmax=t7
步驟S310,當(dāng)tmin小于t3時(shí),使用工具生成[tmin,t3]之間的在t6時(shí)刻仍活躍的分布式事務(wù)的回滾語(yǔ)句;當(dāng)tmin不小于t3時(shí),忽略該步驟。
步驟S311,使用工具重做[t3,t6]之間所有的單機(jī)事務(wù)和在集合:{gtid在t6時(shí)刻活躍事務(wù)列表中不存在}∩{小于t6時(shí)刻的next_gtid}中的所有分布式事務(wù)。
通過(guò)本可選實(shí)施例的上述步驟可以恢復(fù)到數(shù)據(jù)庫(kù)當(dāng)機(jī)之前的時(shí)刻。
可選實(shí)施例三
基于MariaDB分布式集群數(shù)據(jù)庫(kù)用戶(hù)儲(chǔ)蓄系統(tǒng)單一數(shù)據(jù)表恢復(fù)
在可選實(shí)施例中,使用物理熱備份工具備份單節(jié)點(diǎn)數(shù)據(jù),ClusterManager定期向GTM獲取活躍事務(wù)列表數(shù)據(jù)快照,并且日常歸檔binlog日志?;謴?fù)時(shí),獲取單節(jié)點(diǎn)備份數(shù)據(jù)、binlog日志和活躍事務(wù)列表快照,進(jìn)行恢復(fù)、回滾和重做的操作,從而得到運(yùn)維人員誤刪除數(shù)據(jù)表前時(shí)刻全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照。利用該快照,可以導(dǎo)出誤刪除數(shù)據(jù)表,由人工導(dǎo)入在線系統(tǒng)。具體步驟如下所示。
步驟S401,開(kāi)啟分布式數(shù)據(jù)庫(kù)和管理程序(ClusterManager,GTM),該時(shí)間點(diǎn)為t0,從t0時(shí)刻開(kāi)始,ClusterManager定期向GTM獲取活躍事務(wù)列表快照,寫(xiě)入文件,并持久化。
步驟S402,在t1時(shí)刻,Cluster Manager根據(jù)備份策略和上次備份的結(jié)果文件,分別向數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)起備份請(qǐng)求,節(jié)點(diǎn)1的備份結(jié)束時(shí)刻為t3,節(jié)點(diǎn)2的備份結(jié)束時(shí)刻為t4,節(jié)點(diǎn)3的備份結(jié)束時(shí)刻為t5。備份結(jié)束后各個(gè)節(jié)點(diǎn)以備份開(kāi)始時(shí)間命名備份數(shù)據(jù)并返回備份結(jié)果,Cluster Manager記入結(jié)果文件并持久化。
步驟S403,數(shù)據(jù)節(jié)點(diǎn)日常歸檔事務(wù)日志文件,Cluster Manager歸檔活躍事務(wù)列表快照文件。歸檔周期為10分鐘。
對(duì)于本可選實(shí)施例中涉及到的要求在其他生產(chǎn)環(huán)境或者中間機(jī)器恢復(fù)該集群數(shù)據(jù)庫(kù)t7時(shí)刻快照,包括如下步驟:
步驟S404,獲取備份結(jié)果文件,并分析結(jié)果文件,之后獲取t7時(shí)刻之前的最近一次備份數(shù)據(jù)即t1時(shí)刻備份的數(shù)據(jù)文件。
步驟S405,若需要恢復(fù)到最近十分鐘之內(nèi)的數(shù)據(jù),則還需要手動(dòng)將還未來(lái)得及歸檔的事務(wù)日志拷貝到目標(biāo)機(jī)器。
步驟S406,用物理熱備份工具分別恢復(fù)各個(gè)節(jié)點(diǎn)備份數(shù)據(jù)。新節(jié)點(diǎn)1恢復(fù)到時(shí)刻t3。
步驟S407,根據(jù)活躍事務(wù)列表快照文件中的記錄匹配出指定時(shí)刻t7之前最近一次獲取活躍事務(wù)列表快照的時(shí)刻t6。(恢復(fù)快照的粒度為獲取活躍事務(wù)列表快照的周期)
步驟S408,分析t6時(shí)刻的活躍事務(wù)列表,得到該活躍事務(wù)列表中最先開(kāi)始的事務(wù)的開(kāi)始時(shí)間t2。
步驟S409,獲取該節(jié)點(diǎn)時(shí)間為[tmin,tmax]的事務(wù)日志;
其中,tmin=min{t2,t3},tmax=t7
步驟S410,當(dāng)tmin小于t3時(shí),使用工具生成[tmin,t3]之間的在t6時(shí)刻仍活躍的分布式事務(wù)的回滾語(yǔ)句;當(dāng)tmin不小于t3時(shí),忽略該步驟。
步驟S411,使用工具重做[t3,t6]之間所有的單機(jī)事務(wù)和在集合:{gtid在t6時(shí)刻活 躍事務(wù)列表中不存在}∩{小于t6時(shí)刻的next_gtid}中的所有分布式事務(wù)。
通過(guò)本可選實(shí)施例的上述步驟可以導(dǎo)出被誤刪除的數(shù)據(jù)表文件。即可以恢復(fù)到數(shù)據(jù)庫(kù)誤刪除之前的時(shí)刻。當(dāng)運(yùn)維人員誤刪除某些用戶(hù)信息的場(chǎng)景中,可利用本可選實(shí)施例中的恢復(fù)刪除信息之前時(shí)刻數(shù)據(jù)庫(kù)快照。該時(shí)刻的數(shù)據(jù)庫(kù)快照中被刪除的數(shù)據(jù)表還存在,可以利用數(shù)據(jù)庫(kù)工具導(dǎo)出該數(shù)據(jù)表,重新導(dǎo)入到當(dāng)前時(shí)刻的數(shù)據(jù)庫(kù)中。
可選實(shí)施例四
基于Oracle分布式集群數(shù)據(jù)庫(kù)的在線購(gòu)物系統(tǒng)
在本可選實(shí)施例中使用物理熱備份工具備份單節(jié)點(diǎn)數(shù)據(jù),ClusterManager定期向GTM獲取活躍事務(wù)列表數(shù)據(jù)快照,并且日常歸檔redo日志?;謴?fù)時(shí),獲取單節(jié)點(diǎn)備份數(shù)據(jù)、redo日志和活躍事務(wù)列表快照,進(jìn)行恢復(fù)、回滾和重做的操作,從而得到數(shù)據(jù)突變前時(shí)刻全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照。利用該快照,可以在改善數(shù)據(jù)分布后再次測(cè)試數(shù)據(jù)庫(kù)和機(jī)房分別是否合理。該過(guò)程的步驟包括:
步驟S501,開(kāi)啟分布式數(shù)據(jù)庫(kù)和管理程序(ClusterManager,GTM),該時(shí)間點(diǎn)為t0,從t0時(shí)刻開(kāi)始,ClusterManager定期向GTM獲取活躍事務(wù)列表快照,寫(xiě)入文件,并持久化。
步驟S502,在t1時(shí)刻,Cluster Manager根據(jù)備份策略和上次備份的結(jié)果文件,分別向數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)起備份請(qǐng)求,節(jié)點(diǎn)1的備份結(jié)束時(shí)刻為t3,節(jié)點(diǎn)2的備份結(jié)束時(shí)刻為t4,節(jié)點(diǎn)3的備份結(jié)束時(shí)刻為t5。備份結(jié)束后各個(gè)節(jié)點(diǎn)以備份開(kāi)始時(shí)間命名備份數(shù)據(jù)并返回備份結(jié)果,Cluster Manager記入結(jié)果文件并持久化。
步驟S503,數(shù)據(jù)節(jié)點(diǎn)日常歸檔事務(wù)日志文件,Cluster Manager歸檔活躍事務(wù)列表快照文件。歸檔周期為10分鐘。
對(duì)于本可選實(shí)施例中涉及到的要求在其他生產(chǎn)環(huán)境或者中間機(jī)器恢復(fù)該集群數(shù)據(jù)庫(kù)t7時(shí)刻快照的步驟包括:
步驟S504,獲取備份結(jié)果文件,并分析結(jié)果文件,之后獲取t7時(shí)刻之前的最近一次備份數(shù)據(jù)即t1時(shí)刻備份的數(shù)據(jù)文件。
步驟S505,若需要恢復(fù)到最近十分鐘之內(nèi)的數(shù)據(jù),則還需要手動(dòng)將還未來(lái)得及歸檔的事務(wù)日志拷貝到目標(biāo)機(jī)器。
步驟S506,用物理熱備份工具分別恢復(fù)各個(gè)節(jié)點(diǎn)備份數(shù)據(jù)。新節(jié)點(diǎn)1恢復(fù)到時(shí)刻t3。
步驟S507,根據(jù)活躍事務(wù)列表快照文件中的記錄匹配出指定時(shí)刻t7之前最近一次獲取活躍事務(wù)列表快照的時(shí)刻t6。(恢復(fù)快照的粒度為獲取活躍事務(wù)列表快照的周期)
步驟S508,分析t6時(shí)刻的活躍事務(wù)列表,得到該活躍事務(wù)列表中最先開(kāi)始的事務(wù)的開(kāi)始時(shí)間t2。
步驟S509,獲取該節(jié)點(diǎn)時(shí)間為[tmin,tmax]的事務(wù)日志;
其中,tmin=min{t2,t3},tmax=t7
步驟S510,當(dāng)tmin小于t3時(shí),使用工具生成[tmin,t3]之間的在t6時(shí)刻仍活躍的分布式事務(wù)的回滾語(yǔ)句;當(dāng)tmin不小于t3時(shí),忽略該步驟。
步驟S512,使用工具重做[t3,t6]之間所有的單機(jī)事務(wù)和在集合:{gtid在t6時(shí)刻活躍事務(wù)列表中不存在}∩{小于t6時(shí)刻的next_gtid}中的所有分布式事務(wù)。
可選實(shí)施例五
基于MySQL分布式集群數(shù)據(jù)庫(kù)的交易系統(tǒng)
在本可選實(shí)施例中在升級(jí)之前使用物理熱備份工具備份單節(jié)點(diǎn)數(shù)據(jù),ClusterManager定期向GTM獲取活躍事務(wù)列表數(shù)據(jù)快照,并且日常歸檔binlog日志?;謴?fù)時(shí),獲取單節(jié)點(diǎn)備份數(shù)據(jù)、binlog日志和活躍事務(wù)列表快照,進(jìn)行恢復(fù)、回滾操作,從而得到升級(jí)前時(shí)刻全局事務(wù)一致性的數(shù)據(jù)庫(kù)快照。升級(jí)失敗的時(shí)刻,可以回退到該時(shí)刻。該過(guò)程的步驟包括:
步驟S601,開(kāi)啟分布式數(shù)據(jù)庫(kù)和管理程序(ClusterManager,GTM),該時(shí)間點(diǎn)為t0,從t0時(shí)刻開(kāi)始,ClusterManager定期向GTM獲取活躍事務(wù)列表快照,寫(xiě)入文件,并持久化。
步驟S602,在t1時(shí)刻,Cluster Manager根據(jù)備份策略和上次備份的結(jié)果文件,分別向數(shù)據(jù)庫(kù)節(jié)點(diǎn)發(fā)起備份請(qǐng)求,節(jié)點(diǎn)1的備份結(jié)束時(shí)刻為t3,節(jié)點(diǎn)2的備份結(jié)束時(shí)刻為t4,節(jié)點(diǎn)3的備份結(jié)束時(shí)刻為t5。備份結(jié)束后各個(gè)節(jié)點(diǎn)以備份開(kāi)始時(shí)間命名備份數(shù)據(jù)并返回備份結(jié)果,Cluster Manager記入結(jié)果文件并持久化。
步驟S603,數(shù)據(jù)節(jié)點(diǎn)日常歸檔事務(wù)日志文件,Cluster Manager歸檔活躍事務(wù)列表快照文件。歸檔周期為10分鐘。
對(duì)于本實(shí)施例中涉及到的要求在其他生產(chǎn)環(huán)境或者中間機(jī)器恢復(fù)該集群數(shù)據(jù)庫(kù)t7時(shí)刻快照的步驟包括:
步驟S604,獲取備份結(jié)果文件,并分析結(jié)果文件,之后獲取t7時(shí)刻之前的最近一次備份數(shù)據(jù)即t1時(shí)刻備份的數(shù)據(jù)文件。
步驟S605,若需要恢復(fù)到最近十分鐘之內(nèi)的數(shù)據(jù),則還需要手動(dòng)將還未來(lái)得及歸檔的事務(wù)日志拷貝到目標(biāo)機(jī)器。
步驟S606,用物理熱備份工具分別恢復(fù)各個(gè)節(jié)點(diǎn)備份數(shù)據(jù)。新節(jié)點(diǎn)1恢復(fù)到時(shí)刻 t3。
步驟S607,根據(jù)活躍事務(wù)列表快照文件中的記錄匹配出指定時(shí)刻t7之前最近一次獲取活躍事務(wù)列表快照的時(shí)刻t6。(恢復(fù)快照的粒度為獲取活躍事務(wù)列表快照的周期)
步驟S608,分析t6時(shí)刻的活躍事務(wù)列表,得到該活躍事務(wù)列表中最先開(kāi)始的事務(wù)的開(kāi)始時(shí)間t2。
步驟S609,獲取該節(jié)點(diǎn)時(shí)間為[tmin,tmax]的事務(wù)日志;
其中,tmin=min{t2,t3},tmax=t7
步驟S610,當(dāng)tmin小于t3時(shí),使用工具生成[tmin,t3]之間的在t6時(shí)刻仍活躍的分布式事務(wù)的回滾語(yǔ)句;當(dāng)tmin不小于t3時(shí),忽略該步驟。
步驟S611,使用工具重做[t3,t6]之間所有的單機(jī)事務(wù)和在集合:{gtid在t6時(shí)刻活躍事務(wù)列表中不存在}∩{小于t6時(shí)刻的next_gtid}中的所有分布式事務(wù)。
本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S1,分布式數(shù)據(jù)庫(kù)中的集群管理器將與集群管理器連接的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)恢復(fù)到指定時(shí)刻之前最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù);
S2,集群管理器基于最近一次物理備份結(jié)束時(shí)刻的數(shù)據(jù)按照事務(wù)日志中的事務(wù)的執(zhí)行時(shí)間的順序重做事務(wù)日志中的事務(wù)所指示的操作得到在指定時(shí)刻各個(gè)節(jié)點(diǎn)的數(shù)據(jù)快照,其中,事務(wù)日志為物理備份結(jié)束時(shí)刻至指定時(shí)刻之間歸檔的對(duì)數(shù)據(jù)進(jìn)行的操作。
可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例及可選實(shí)施方式中所描述的示例,本實(shí)施例在此不再贅述。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。