取所述主庫上已完成的操作。
[0066] 例如,所述按時間順序獲取所述主庫上已完成的操作,可以包括:
[0067] 順序讀取記載在主庫操作日志中的操作。
[0068] 通常當(dāng)數(shù)據(jù)庫上完成了一操作后,數(shù)據(jù)庫會在其操作日志中按順序記錄下該操作 及完成的時間。所以讀取主庫的操作日志,便可逐一獲取到主庫上已完成的操作。
[0069] 在步驟S102中,每次獲取到所述操作后,以當(dāng)前獲取的所述操作的完成時間為基 礎(chǔ)延遲預(yù)設(shè)時長后在所述從庫上執(zhí)行相同的操作。
[0070] 以上兩個步驟可以看作是利用從庫對主庫進(jìn)行備份的過程。
[0071] 執(zhí)行與主庫相同的操作也可稱為復(fù)制主庫的操作。對于預(yù)設(shè)時長的大小本實施例 并不進(jìn)行限制,用戶可以根據(jù)需要在初始時進(jìn)行設(shè)置,例如可以設(shè)置為30分鐘;此外也可 以根據(jù)用戶的輸入對所述預(yù)設(shè)時長進(jìn)行修改。
[0072] 從庫作為主庫的備份數(shù)據(jù)庫,初始時存儲與主庫相同的數(shù)據(jù)。而備份過程則是一 種異步備份,在主庫發(fā)生變化(即在主庫上完成各種操作)的過程中,也令從庫發(fā)生同樣的 變化,且與主庫相比,從庫的變化會延遲預(yù)設(shè)時長,例如延遲30分鐘。
[0073] 作為示例該場景可參見圖2所示,在圖2中201為主庫,202為從庫,主庫上的操作 執(zhí)行完畢后寫入主庫的操作日志,而從庫則可以通過I/O線程讀取主庫的操作日志,將主 庫操作日志中的操作寫入到從庫的待執(zhí)行操作列表中,按順序?qū)⒚總€操作延遲30分鐘后 通過SQL線程在從庫上執(zhí)行。
[0074] 還可以進(jìn)一步參見表1所示,在表1中可以看到,從庫復(fù)制了主庫上的各項操作, 且從庫上的操作都比主庫上相同的操作延遲了 30分鐘。
[0075] 表 1
[0076]
[0077] 在步驟S103中,當(dāng)所述主庫出現(xiàn)錯誤時,確定導(dǎo)致錯誤的錯誤操作。
[0078] 例如,可以在主庫的操作日志中對錯誤操作進(jìn)行定位。
[0079] 在步驟S104中,判斷所述錯誤操作是否已經(jīng)在所述從庫上執(zhí)行。
[0080] 在步驟S105中,如果所述錯誤操作尚未在所述從庫上執(zhí)行,則使用所述從庫的數(shù) 據(jù)對所述主庫的數(shù)據(jù)進(jìn)行恢復(fù)。
[0081] 以上三個步驟可以看作是利用從庫對主庫進(jìn)行恢復(fù)的過程。
[0082] 這樣當(dāng)發(fā)現(xiàn)主庫出現(xiàn)了錯誤時,如果錯誤是在主庫上執(zhí)行該錯誤操作后的預(yù)設(shè)時 長內(nèi)被發(fā)現(xiàn)的,也即發(fā)現(xiàn)錯誤時從庫尚未執(zhí)行相同的錯誤操作,那么該錯誤就可被糾正,可 使用從庫的數(shù)據(jù)對主庫進(jìn)行修復(fù),從而挽回主庫的數(shù)據(jù)。
[0083] 需要說明的是,在有些情況下,如果錯誤發(fā)現(xiàn)的較晚,發(fā)現(xiàn)錯誤時從庫已經(jīng)執(zhí)行了 相同的錯誤操作,那么就需要其他技術(shù)來對主庫進(jìn)行恢復(fù),這類情況不在本公開的討論范 疇之內(nèi)。
[0084] 參見圖3所示,在本實施例或本公開其他某些實施例中,以當(dāng)前獲取的所述操作 的完成時間為基礎(chǔ)延遲預(yù)設(shè)時長后在所述從庫上執(zhí)行相同的操作,可以包括:
[0085] 在步驟S301中,獲取所述從庫的當(dāng)前時間。
[0086] 在步驟S302中,判斷當(dāng)前獲取的所述操作的完成時間與所述當(dāng)前時間之差是否 小于所述預(yù)設(shè)時長;
[0087] 在步驟S303中,如果小于所述預(yù)設(shè)時長,則返回步驟S301。
[0088] 在步驟S304中,如果大于或等于所述預(yù)設(shè)時長,則在所述從庫上執(zhí)行與所述操作 相同的操作。
[0089] 在一些情況下,需要進(jìn)行恢復(fù)時,從庫可能尚未執(zhí)行到錯誤操作之前的操作,此時 為了使主庫能夠恢復(fù)到錯誤操作前的狀態(tài),可以使從庫追趕上主庫的進(jìn)度。例如,假設(shè)錯誤 操作是操作18,但是從庫只執(zhí)行到操作10,那么可以先讓從庫一直執(zhí)行到操作17,即達(dá)到 主庫在執(zhí)行操作18之前的狀態(tài),從而使主庫可以借助從庫而恢復(fù)到操作18之前的狀態(tài)。
[0090] 所以參見圖4所示,在本實施例或本公開其他某些實施例中,使用所述從庫的數(shù) 據(jù)對所述主庫的數(shù)據(jù)進(jìn)行恢復(fù),可以包括:
[0091] 在步驟S401中,在所述從庫上執(zhí)行完所述錯誤操作之前的操作。
[0092] 在步驟S402中,使用所述從庫當(dāng)前的數(shù)據(jù)對所述主庫的數(shù)據(jù)進(jìn)行修復(fù),以使所述 主庫的數(shù)據(jù)恢復(fù)到執(zhí)行所述錯誤操作之前的狀態(tài)。
[0093]當(dāng)然在本公開其他實施例中,也可以采用其他方式使用所述從庫的數(shù)據(jù)對所述主 庫的數(shù)據(jù)進(jìn)行恢復(fù),例如,還可以在出現(xiàn)錯誤時令從庫停止執(zhí)行主庫的步驟,然后使用從庫 上的數(shù)據(jù)對主庫進(jìn)行修復(fù),再在主庫上執(zhí)行完錯誤操作之前的步驟,從而也可使主庫的數(shù) 據(jù)恢復(fù)到執(zhí)行所述錯誤操作之前的狀態(tài)。對此本實施例并不進(jìn)行限制。
[0094] 在相關(guān)技術(shù)中,當(dāng)出現(xiàn)錯誤需要恢復(fù)數(shù)據(jù)時,因為當(dāng)前時刻與備份時刻之間很可 能已經(jīng)發(fā)生了很多操作,但相關(guān)技術(shù)只能恢復(fù)到備份時刻,所以可能會造成數(shù)據(jù)的丟失。而 在本公開方案中,可以恢復(fù)到錯誤操作的前一操作的狀態(tài)。換句話說,相關(guān)技術(shù)在恢復(fù)數(shù)據(jù) 時只能精確到前一"時刻",而本公開方案則可以精確到前一"操作",這就在很大程度上避 免了數(shù)據(jù)的丟失,將損失減少到盡可能小,提升了數(shù)據(jù)庫運行時的安全性和可靠性。
[0095] 圖5是根據(jù)一示例性實施例示出的一種數(shù)據(jù)庫恢復(fù)裝置的框圖。所述裝置用于由 主庫和從庫組成的數(shù)據(jù)庫系統(tǒng),初始時所述從庫的數(shù)據(jù)與所述主庫的數(shù)據(jù)相同。
[0096] 參見圖5所示,所述裝置包括:
[0097] 主庫操作獲取模塊501,用于按時間順序獲取所述主庫上已完成的操作,每次獲取 到所述操作后,觸發(fā)從庫異步備份模塊;
[0098] 從庫異步備份模塊502,用于以主庫操作獲取模塊當(dāng)前獲取的所述操作的完成時 間為基礎(chǔ),延遲預(yù)設(shè)時長后在所述從庫上執(zhí)行相同的操作;
[0099] 恢復(fù)判斷模塊503,用于當(dāng)所述主庫出現(xiàn)錯誤時,確定導(dǎo)致錯誤的錯誤操作,判斷 所述錯誤操作是否已經(jīng)在所述從庫上執(zhí)行,如果所述錯誤操作尚未在所述從庫上執(zhí)行,則 觸發(fā)數(shù)據(jù)恢復(fù)模塊;
[0100] 數(shù)據(jù)恢復(fù)模塊504,用于使用所述從庫的數(shù)據(jù)對所述主庫的數(shù)據(jù)進(jìn)行恢復(fù)。
[0101] 參見圖6所示,在本實施例或本公開其他某些實施例中,所述從庫異步備份模塊 502可以包括:
[0102] 時間獲取子模塊601,用于獲取所述從庫的當(dāng)前時間;
[0103] 時間對比子模塊602,用于判斷判斷當(dāng)前獲取的所述操作的完成時間與所述當(dāng)前 時間之差是否小于所述預(yù)設(shè)時長,如果小于所述預(yù)設(shè)時長,則觸發(fā)時間獲取子模塊,如果大 于或等于所述預(yù)設(shè)時長,則在所述從庫上執(zhí)行與所述操作相同的操作。
[0104] 參見圖7所示,在本實施例或本公開其他某些實施例中,所述數(shù)據(jù)恢復(fù)模塊504可 以包括:
[0105] 恢復(fù)準(zhǔn)備子模塊701,用于在所述從庫上執(zhí)行完所述錯誤操作之前的操作;
[0106] 數(shù)據(jù)修復(fù)子模塊702,用于使用所述從庫當(dāng)前的數(shù)據(jù)對所述主庫的數(shù)據(jù)進(jìn)行修復(fù), 以使所述主庫的數(shù)據(jù)恢復(fù)到執(zhí)行所述錯誤操作之前的狀態(tài)。
[0107] 參見圖8所示,在本實施例或本公開其他某些實施例中,所述主庫操作獲取模塊 501可以包括:
[0108] 順序讀取子模塊801,用于順序讀取記載在主庫操作日志中的操作;
[0109] 備份觸發(fā)子模塊802,用于每次獲取到所述操作后,觸發(fā)從庫異步備份模塊。
[0110] 參見圖9所示,在本實施例或本公開其他某些實施例中,所述裝置還可以包括:
[0111] 時長修改模塊505,用于根據(jù)用戶的輸入對所述預(yù)設(shè)時長進(jìn)行修改。
[0112] 關(guān)于上述實施例中的裝置,其中各個模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法 的實施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。
[0113] 在相關(guān)技術(shù)中,當(dāng)出現(xiàn)錯誤需要恢復(fù)數(shù)據(jù)時,因為當(dāng)前時刻與備份時刻之間很可 能已經(jīng)發(fā)生了很多操作,但相關(guān)技術(shù)只能恢復(fù)到備份時刻,所以可能會造成數(shù)據(jù)的丟失。而 在本公開方案中,可以恢復(fù)到錯誤操作的前一操作的狀態(tài)。換句話說,相關(guān)技術(shù)在恢復(fù)數(shù)據(jù) 時只能精確到前一"時刻",而本公開方案則可以精確到前一"操作",這就在很大程度上避 免了數(shù)據(jù)的丟失,將損失減少到盡可能小,提升了數(shù)據(jù)庫運行時的安全性和可靠性。
[0114] 本公開還公開了一種數(shù)據(jù)庫恢復(fù)裝置,所述裝置用于由主庫和從庫組成的數(shù)據(jù)