本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)庫備份方法、裝置及系統(tǒng)。
背景技術(shù):
隨著計算機在數(shù)據(jù)分析應(yīng)用領(lǐng)域的不斷深入,數(shù)據(jù)庫使用需求范圍逐步擴大,數(shù)據(jù)庫在應(yīng)用系統(tǒng)中占有的地位和作用愈加重要。因此,在基于數(shù)據(jù)庫系統(tǒng)的開發(fā)使用中,需要注重數(shù)據(jù)庫的安全問題。比如,保障數(shù)據(jù)庫安全的最佳方案就是及時做好數(shù)據(jù)備份。
目前,對于源數(shù)據(jù)庫中執(zhí)行的任意操作,均可以記錄在源數(shù)據(jù)庫的日志文件中。通過將該日志文件發(fā)送給其他數(shù)據(jù)庫,其他數(shù)據(jù)庫可以根據(jù)該日志文件執(zhí)行同樣的操作處理,從而與源數(shù)據(jù)庫保持一致,以實現(xiàn)數(shù)據(jù)庫的備份。
由于日志文件的占用空間通常較大,故直接發(fā)送日志文件的實現(xiàn)方式會占用較多的網(wǎng)絡(luò)資源。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種數(shù)據(jù)庫備份方法、裝置及系統(tǒng),能夠減少對網(wǎng)絡(luò)資源的占用。
為了達到上述目的,本發(fā)明是通過如下技術(shù)方案實現(xiàn)的:
第一方面,本發(fā)明提供了一種數(shù)據(jù)庫備份方法,包括:
根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息;
根據(jù)獲取的所述每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型;
根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮;
將壓縮后的每一類記錄信息發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
進一步地,所述寫操作類型包括:insert(插入)、update(更新)、delete(刪除)、for update(更新)中的至少一種。
進一步地,所述對該類記錄信息進行壓縮,包括:根據(jù)建立的該類記錄信息的共用索引,刪除該類記錄信息中的與所述共用索引相同的內(nèi)容,以對該類記錄信息進行壓縮。
進一步地,所述將壓縮后的每一類記錄信息發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫,包括:生成具有固定格式的包括壓縮后的每一類記錄信息的壓縮日志文件,并將所述壓縮日志文件發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
第二方面,本發(fā)明提供了一種數(shù)據(jù)庫備份裝置,包括:
獲取單元,用于根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息;
確定單元,用于根據(jù)獲取的所述每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型;
壓縮單元,用于根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮;
發(fā)送單元,用于將壓縮后的每一類記錄信息發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
進一步地,所述寫操作類型包括:insert、update、delete、for update中的至少一種。
進一步地,所述壓縮單元,具體用于根據(jù)建立的該類記錄信息的共用索引,刪除該類記錄信息中的與所述共用索引相同的內(nèi)容,以對該類記錄信息進行壓縮。
進一步地,所述發(fā)送單元,具體用于生成具有固定格式的包括壓縮后的每一類記錄信息的壓縮日志文件,并將所述壓縮日志文件發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
第三方面,本發(fā)明提供了一種數(shù)據(jù)庫備份系統(tǒng),包括:
源數(shù)據(jù)庫、與所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫,以及上述任一所述的數(shù)據(jù)庫備份裝置,其中,
所述目標(biāo)數(shù)據(jù)庫,用于接收所述數(shù)據(jù)庫備份裝置發(fā)來的壓縮后的每一類記錄信息;根據(jù)所述壓縮后的每一類記錄信息,執(zhí)行對應(yīng)的寫操作。
進一步地,所述目標(biāo)數(shù)據(jù)庫,還用于根據(jù)預(yù)先確定的雙向心跳探測機制和心跳請求時間間隔,周期性地向所述源數(shù)據(jù)庫發(fā)送心跳請求;接收所述源數(shù)據(jù)庫返回的心跳包;判斷所述心跳包中包括的信息是否與預(yù)先確定的信息相同,若否,確定所述源數(shù)據(jù)庫出現(xiàn)故障。
進一步地,所述目標(biāo)數(shù)據(jù)庫,具體用于接收所述源數(shù)據(jù)庫返回的心跳包,且所述心跳包中攜帶有所述源數(shù)據(jù)庫對應(yīng)的MAC(Media Access Control,媒體訪問控制)地址;根據(jù)接收到的所述源數(shù)據(jù)庫對應(yīng)的MAC地址和自身對應(yīng)的MAC地址,執(zhí)行哈希算法,得到當(dāng)前的哈希值;判斷所述當(dāng)前的哈希值是否與預(yù)先確定的標(biāo)準(zhǔn)值相同,若否,確定所述源數(shù)據(jù)庫出現(xiàn)故障。
進一步地,所述目標(biāo)數(shù)據(jù)庫,還用于當(dāng)判斷出未接收到所述源數(shù)據(jù)庫返回的心跳包時,確定當(dāng)前的心跳請求時間間隔,且所述當(dāng)前的心跳請求時間間隔小于對應(yīng)的上一個心跳請求時間間隔,基于所述當(dāng)前的心跳請求時間間隔,向所述源數(shù)據(jù)庫發(fā)送心跳請求,并如此循環(huán);在判斷出連續(xù)至少兩次未接收到所述源數(shù)據(jù)庫返回的心跳包時,確定所述源數(shù)據(jù)庫出現(xiàn)故障。
本發(fā)明提供了一種數(shù)據(jù)庫備份方法、裝置及系統(tǒng),根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息;根據(jù)獲取的每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型;根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮;將壓縮后的每一類記錄信息發(fā)送給源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。目標(biāo)數(shù)據(jù)庫根據(jù)接收到的記錄信息,通過執(zhí)行對應(yīng)的寫操作,可以實現(xiàn)源數(shù)據(jù)庫的備份。與日志文件相比,壓縮后的記錄信息的占用空間顯著減小,故記錄信息的發(fā)送可以占用較少的網(wǎng)絡(luò)資源。因此,本發(fā)明能夠減少對網(wǎng)絡(luò)資源的占用。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一實施例提供的一種數(shù)據(jù)庫備份方法的流程圖;
圖2是本發(fā)明一實施例提供的另一種數(shù)據(jù)庫備份方法的流程圖;
圖3是本發(fā)明一實施例提供的一種數(shù)據(jù)庫備份裝置的示意圖;
圖4是本發(fā)明一實施例提供的一種數(shù)據(jù)庫備份系統(tǒng)的示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例,基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種數(shù)據(jù)庫備份方法,可以包括以下步驟:
步驟101:根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息。
步驟102:根據(jù)獲取的所述每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型。
步驟103:根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮。
步驟104:將壓縮后的每一類記錄信息發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
本發(fā)明實施例提供了一種數(shù)據(jù)庫備份方法,根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息;根據(jù)獲取的每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型;根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮;將壓縮后的每一類記錄信息發(fā)送給源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。目標(biāo)數(shù)據(jù)庫根據(jù)接收到的記錄信息,通過執(zhí)行對應(yīng)的寫操作,可以實現(xiàn)源數(shù)據(jù)庫的備份。與日志文件相比,壓縮后的記錄信息的占用空間顯著減小,故記錄信息的發(fā)送可以占用較少的網(wǎng)絡(luò)資源。因此,本發(fā)明能夠減少對網(wǎng)絡(luò)資源的占用。
在本發(fā)明的一個實施例中,所述寫操作類型包括:insert、update、delete、for update中的至少一種。
詳細地,寫操作對應(yīng)的SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)語句中可以包括insert、update、delete、for update中的至少一種關(guān)鍵字,且每一種關(guān)鍵字對應(yīng)于一種寫操作類型。
在本發(fā)明的一個實施例中,為了說明一種記錄信息的壓縮方式,所以,所述對該類記錄信息進行壓縮,包括:根據(jù)建立的該類記錄信息的共用索引,刪除該類記錄信息中的與所述共用索引相同的內(nèi)容,以對該類記錄信息進行壓縮。
詳細地,通過將同一類記錄信息中的與相應(yīng)共用索引相同的內(nèi)容進行刪除,可以釋放該部分內(nèi)容所占用的空間資源,以使該類記錄信息的占用空間量減小。
在本發(fā)明的一個實施例中,所述將壓縮后的每一類記錄信息發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫,包括:生成具有固定格式的包括壓縮后的每一類記錄信息的壓縮日志文件,并將所述壓縮日志文件發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
詳細地,在對每一類記錄信息進行壓縮操作后,可以生成具有固定格式的壓縮日志文件,且該壓縮日志文件中可以包括每一類壓縮后的記錄信息。通過將壓縮日志文件發(fā)送至目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫可以根據(jù)該壓縮日志文件,執(zhí)行與源數(shù)據(jù)庫相同的每一項寫操作,從而完成從源數(shù)據(jù)庫到目標(biāo)數(shù)據(jù)庫的備份。
如圖2所示,本發(fā)明一個實施例提供了另一種數(shù)據(jù)庫備份方法,該方法以基于日志的數(shù)據(jù)庫備份及故障檢測管理方法為例,具體包括以下步驟:
步驟201:在統(tǒng)一的資源管理平臺中創(chuàng)建一個資源管理組,且該資源管理組中包括源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫。
詳細地,當(dāng)需要對源數(shù)據(jù)庫進行備份時,可以將該源數(shù)據(jù)庫和待備份的目標(biāo)數(shù)據(jù)庫設(shè)置于同一資源管理平臺的同一資源管理組中。
本實施例中,源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫可以為一對一的對應(yīng)關(guān)系。
此外,在本發(fā)明一個實施例中,一個目標(biāo)數(shù)據(jù)庫可以對應(yīng)于至少一個源數(shù)據(jù)庫,以實現(xiàn)數(shù)據(jù)備份的聚合,該目標(biāo)數(shù)據(jù)庫可以作為每一個源數(shù)據(jù)庫的鏡像;以及一個源數(shù)據(jù)庫可以對應(yīng)于至少一個目標(biāo)數(shù)據(jù)庫,以實現(xiàn)數(shù)據(jù)備份的廣播,每一個目標(biāo)數(shù)據(jù)庫均可以作為源數(shù)據(jù)庫的鏡像。
步驟202:在本地主機上創(chuàng)建與源數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫空間,在目的端主機上創(chuàng)建與目標(biāo)數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫空間。
為了實現(xiàn)目標(biāo)數(shù)據(jù)庫對源數(shù)據(jù)庫的備份,可以在一個主機上創(chuàng)建源數(shù)據(jù)庫所需的數(shù)據(jù)庫空間,以及在另一主機上創(chuàng)建目標(biāo)數(shù)據(jù)庫所需的數(shù)據(jù)庫空間。
詳細地,創(chuàng)建的目標(biāo)數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫空間可以不小于創(chuàng)建的源數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫空間。通常情況下,可以設(shè)置兩個數(shù)據(jù)庫空間大小相等,目標(biāo)數(shù)據(jù)庫可以為源數(shù)據(jù)庫的實時復(fù)制的鏡像。
如上所述,在本發(fā)明一個實施例中,當(dāng)一個目標(biāo)數(shù)據(jù)庫對應(yīng)多個源數(shù)據(jù)庫時,目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)庫空間應(yīng)不小于該多個源數(shù)據(jù)庫的數(shù)據(jù)庫空間的總和;當(dāng)一個源數(shù)據(jù)庫對應(yīng)多個目標(biāo)數(shù)據(jù)庫時,每一個目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)庫空間均應(yīng)不小于源數(shù)據(jù)庫的數(shù)據(jù)庫空間。
步驟203:獲取源數(shù)據(jù)庫的日志文件,并獲取該日志文件中的每一項寫操作對應(yīng)的記錄信息。
詳細地,寫操作類型可以包括:insert、update、delete、for update中的至少一種。
由于源數(shù)據(jù)庫的日志文件空間占用量大,直接發(fā)送日志文件會占用較多的網(wǎng)絡(luò)資源,故可以僅提取該日志文件中的必要信息,如可以對寫操作對應(yīng)的記錄信息進行截取。
步驟204:根據(jù)獲取的每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型。
由于不同類型的寫操作對應(yīng)的執(zhí)行方式不同,故可以將獲取到的全部寫操作對應(yīng)的記錄信息進行分類。
步驟205:根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并根據(jù)建立的該共用索引,刪除該類記錄信息中的與該共用索引相同的內(nèi)容,以對該類記錄信息進行壓縮。
對于每一類記錄信息,該類記錄信息中的每一項記錄信息中均包括相同的索引內(nèi)容。當(dāng)具有相同索引內(nèi)容的記錄信息的項數(shù)較多時,該索引內(nèi)容會占用較多的日志資源,故可以根據(jù)每一類記錄信息中包括的索引內(nèi)容,建立該類記錄信息的共用索引,并將該類記錄信息中的與該共用索引相同的索引內(nèi)容進行篩除,以實現(xiàn)該類記錄信息的壓縮。
步驟206:生成具有固定格式的包括壓縮后的每一類記錄信息的壓縮日志文件,并將壓縮日志文件發(fā)送給源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
為方便源數(shù)據(jù)庫的實時備份,可以生成壓縮日志文件,該壓縮日志文件包括壓縮后的每一類記錄信息,且該壓縮日志文件具有系統(tǒng)可識別的固定格式。
與最初獲取的源數(shù)據(jù)庫的日志文件相比,生成的壓縮日志文件的數(shù)據(jù)量大大減小。例如,通常情況下,壓縮日志文件的數(shù)據(jù)量可以為原日志文件的1/4左右。由此可見,壓縮日志文件的占用空間大大減小,數(shù)據(jù)備份時,壓縮日志文件的聯(lián)網(wǎng)傳輸相應(yīng)的也會占用較少的基礎(chǔ)帶寬和網(wǎng)絡(luò)資源。
詳細地,壓縮日志文件的發(fā)送可以在亞秒一級的數(shù)量級上進行。
步驟207:目標(biāo)數(shù)據(jù)庫在接收到壓縮日志文件時,根據(jù)該壓縮日志文件執(zhí)行對應(yīng)的寫操作。
詳細地,目標(biāo)數(shù)據(jù)庫可以對接收到的壓縮日志文件進行解壓縮,并根據(jù)解壓出的日志執(zhí)行每一項寫操作。通過執(zhí)行每一項寫操作,可以使目標(biāo)數(shù)據(jù)庫執(zhí)行與源數(shù)據(jù)庫相同的修改,故實現(xiàn)從源數(shù)據(jù)庫到目標(biāo)數(shù)據(jù)庫的備份。
本發(fā)明實施例中,通過對源數(shù)據(jù)庫的日志文件進行壓縮,并將壓縮后的日志文件傳輸至目標(biāo)數(shù)據(jù)庫,以實現(xiàn)從源數(shù)據(jù)庫至目標(biāo)數(shù)據(jù)庫的實時備份。這一實現(xiàn)方式可以消耗較少的數(shù)據(jù)庫資源,為數(shù)據(jù)庫的實時同步提供便利,故可以為一種高效的數(shù)據(jù)庫備份方法。
步驟208:目標(biāo)數(shù)據(jù)庫根據(jù)預(yù)先確定的雙向心跳探測機制和心跳請求時間間隔,周期性地向源數(shù)據(jù)庫發(fā)送心跳請求。
本發(fā)明實施例中,可以根據(jù)實際需求,確定適宜的心跳請求時間間隔,如10s,即每10s進行一次故障檢測,以便于源數(shù)據(jù)庫故障時能夠及時檢測到該故障情況,并執(zhí)行相應(yīng)故障處理。
步驟209:達到心跳請求時間間隔對應(yīng)的心跳包接收時間時,目標(biāo)數(shù)據(jù)庫判斷其是否接收到源數(shù)據(jù)庫返回的心跳包,若是,執(zhí)行步驟212,否則,執(zhí)行步驟210。
目標(biāo)數(shù)據(jù)庫每10s接收一次源數(shù)據(jù)庫發(fā)來的心跳包,由于判斷源數(shù)據(jù)庫故障可以有兩種實現(xiàn)方式:一是連續(xù)多次未接收到心跳包,二是接收到的心跳包錯誤,因此在再次達到10s間隔時,目標(biāo)數(shù)據(jù)庫首先可以判斷其是否接收到心跳包。
在本發(fā)明一個實施例中,同時可以由源數(shù)據(jù)庫向目標(biāo)數(shù)據(jù)庫發(fā)送心跳請求,以判斷目標(biāo)數(shù)據(jù)庫是否出現(xiàn)故障。由于與目標(biāo)數(shù)據(jù)庫的心跳請求可以基于同一實現(xiàn)原理,故在此不作贅述。
在本發(fā)明一個實施例中,當(dāng)一端檢測到已達到心跳包接收時間,但未接收到另一端發(fā)來的心跳包時,如一端在10s內(nèi)ping不通對端時,就會發(fā)出報警,并記錄此時故障情況。
步驟210:判斷是否連續(xù)三次未接收到源數(shù)據(jù)庫返回的心跳包,若是,確定源數(shù)據(jù)庫出現(xiàn)故障,并結(jié)束當(dāng)前流程,否則,執(zhí)行步驟211。
本實施例中,可以設(shè)定連續(xù)三次未接收到心跳包時,即可以認為源數(shù)據(jù)庫出現(xiàn)故障。當(dāng)然,根據(jù)不同的實際需求,同樣可以確定為其他連續(xù)次數(shù)。
當(dāng)目標(biāo)數(shù)據(jù)庫判斷出未接收到心跳包時,可以進一步判斷是否連續(xù)三次未接收到心跳包,若判斷結(jié)果為是,則可以直接確定源數(shù)據(jù)庫出現(xiàn)故障,若判斷結(jié)果為否,則可以再次嘗試獲取心跳包。
步驟211:確定當(dāng)前的心跳請求時間間隔,且當(dāng)前的心跳請求時間間隔小于對應(yīng)的上一個心跳請求時間間隔,并基于確定的當(dāng)前的心跳請求時間間隔,向源數(shù)據(jù)庫發(fā)送心跳請求,并執(zhí)行步驟209。
若當(dāng)前為第一次未接收到心跳包,則可以確定上一個心跳請求時間間隔為10s,并確定當(dāng)前的心跳請求時間間隔小于10s,比如為5s,并基于確定的5s為間隔,再次獲取心跳包。對應(yīng)地,若達到5s時間間隔時未接收到心跳包,則當(dāng)前為第二次未接收到心跳包,則可以確定上一個心跳請求時間間隔為5s,并確定當(dāng)前的心跳請求時間間隔小于5s,比如為2s,并基于確定的2s為間隔,再次獲取心跳包。
因此,本實施例中,可以設(shè)置三次均未接收到心跳包所對應(yīng)的心跳請求時間間隔可以依次為10s、5s和2s。即,當(dāng)達到10s間隔卻未接收到心跳包時,以5s間隔再次獲取心跳包,若仍未接收到心跳包,再以2s間隔再次獲取心跳包,若這三次均未接收到心跳包,則可以直接確定源數(shù)據(jù)庫出現(xiàn)故障。
正常情況下,可以設(shè)置相對較長的心跳請求時間間隔,以周期性檢測源數(shù)據(jù)庫是否處于正常工作狀態(tài)。但當(dāng)檢測到未接收到源數(shù)據(jù)庫發(fā)來的心跳包時,可以通過心跳請求時間間隔依次遞減的實現(xiàn)方式,快速驗證源數(shù)據(jù)庫是否出現(xiàn)故障,以便于能夠及時發(fā)現(xiàn)故障并解除故障。
步驟212:目標(biāo)數(shù)據(jù)庫根據(jù)源數(shù)據(jù)庫返回的心跳包,判斷該心跳包中包括的信息是否與預(yù)先確定的信息相同,若是,確定源數(shù)據(jù)庫工作正常,否則,確定源數(shù)據(jù)庫出現(xiàn)故障。
當(dāng)目標(biāo)數(shù)據(jù)庫接收到心跳包時,可以判斷心跳包是否錯誤。
詳細地,本發(fā)明實施例中,源數(shù)據(jù)庫發(fā)來的心跳包中可以攜帶有源數(shù)據(jù)庫對應(yīng)的MAC地址,目標(biāo)數(shù)據(jù)庫可以根據(jù)接收到的源數(shù)據(jù)庫對應(yīng)的MAC地址和自身對應(yīng)的MAC地址,執(zhí)行哈希算法,得到當(dāng)前的哈希值。然后,判斷得到的當(dāng)前的哈希值是否與預(yù)先確定的標(biāo)準(zhǔn)值相同,若是,可以確定源數(shù)據(jù)庫工作正常,否則,可以確定源數(shù)據(jù)庫出現(xiàn)故障。
在本發(fā)明一個實施例中,目標(biāo)數(shù)據(jù)庫可以向源數(shù)據(jù)庫發(fā)送固定內(nèi)容的心跳包,源數(shù)據(jù)庫可以根據(jù)預(yù)先確定的數(shù)據(jù)更改規(guī)則,對該固定內(nèi)容進行固定更改,并將更改后的心跳包發(fā)送給目標(biāo)數(shù)據(jù)庫,若目標(biāo)數(shù)據(jù)庫判斷出該固定更改正確,則可以確定源數(shù)據(jù)庫工作正常,否則,可以確定源數(shù)據(jù)庫出現(xiàn)故障。
詳細地,數(shù)據(jù)庫間的數(shù)據(jù)同步和數(shù)據(jù)庫故障檢測,可以基于數(shù)據(jù)庫日志、雙向心跳機制和兩端間的網(wǎng)絡(luò)通信得以進行。此外,管理人員還可以通過統(tǒng)一的管理平臺對整個同步過程進行監(jiān)控,以及根據(jù)管理平臺的日志進行異常問題的及時發(fā)現(xiàn)和及時處理。這一實現(xiàn)方式可以實現(xiàn)對本地數(shù)據(jù)庫進行鏡像復(fù)制、異地容災(zāi)的高安全和高可用性等功能。
基于本發(fā)明實施例的實現(xiàn)方式,可以在異構(gòu)的IT基礎(chǔ)結(jié)構(gòu)之間實現(xiàn)大量數(shù)據(jù)亞秒一級的實時復(fù)制,其中,該異構(gòu)的IT基礎(chǔ)結(jié)構(gòu)可以包括幾乎所有常用操作系統(tǒng)平臺和數(shù)據(jù)庫平臺。因此,本發(fā)明實施例可以在應(yīng)急系統(tǒng)、在線報表、實時數(shù)據(jù)倉庫供應(yīng)、交易跟蹤、數(shù)據(jù)同步、集中/分發(fā)、容災(zāi)、數(shù)據(jù)庫升級和移植、雙業(yè)務(wù)中心等各種場景下進行應(yīng)用。此外,還可以實現(xiàn)一對一、一對多、多對一、雙向、點對點、級聯(lián)等多種靈活的拓撲結(jié)構(gòu)。
如圖3所示,本發(fā)明一個實施例提供了一種數(shù)據(jù)庫備份裝置30,包括:
獲取單元301,用于根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息;
確定單元302,用于根據(jù)獲取的所述每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型;
壓縮單元303,用于根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮;
發(fā)送單元304,用于將壓縮后的每一類記錄信息發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
在本發(fā)明一個實施例中,所述寫操作類型包括:insert、update、delete、for update中的至少一種。
在本發(fā)明一個實施例中,所述壓縮單元303,具體用于根據(jù)建立的該類記錄信息的共用索引,刪除該類記錄信息中的與所述共用索引相同的內(nèi)容,以對該類記錄信息進行壓縮。
在本發(fā)明一個實施例中,所述發(fā)送單元304,具體用于生成具有固定格式的包括壓縮后的每一類記錄信息的壓縮日志文件,并將所述壓縮日志文件發(fā)送給所述源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。
如圖4所示,本發(fā)明實施例提供了一種數(shù)據(jù)庫備份系統(tǒng),包括:
源數(shù)據(jù)庫40、與所述源數(shù)據(jù)庫40對應(yīng)的目標(biāo)數(shù)據(jù)庫50,以及上述任一所述的數(shù)據(jù)庫備份裝置30,其中,
所述目標(biāo)數(shù)據(jù)庫50,用于接收所述數(shù)據(jù)庫備份裝置30發(fā)來的壓縮后的每一類記錄信息;根據(jù)所述壓縮后的每一類記錄信息,執(zhí)行對應(yīng)的寫操作。
在本發(fā)明一個實施例中,一個所述源數(shù)據(jù)庫40可以對應(yīng)于至少一個所述目標(biāo)數(shù)據(jù)庫50;以及一個所述目標(biāo)數(shù)據(jù)庫50可以對應(yīng)于至少一個所述源數(shù)據(jù)庫40。此外,所述數(shù)據(jù)庫備份裝置30可以對應(yīng)于至少一組所述源數(shù)據(jù)庫40和所述目標(biāo)數(shù)據(jù)庫50的組合。
在本發(fā)明一個實施例中,所述目標(biāo)數(shù)據(jù)庫50,進一步用于根據(jù)預(yù)先確定的雙向心跳探測機制和心跳請求時間間隔,周期性地向所述源數(shù)據(jù)庫發(fā)送心跳請求;接收所述源數(shù)據(jù)庫返回的心跳包;判斷所述心跳包中包括的信息是否與預(yù)先確定的信息相同,若否,確定所述源數(shù)據(jù)庫出現(xiàn)故障。
在本發(fā)明一個實施例中,所述目標(biāo)數(shù)據(jù)庫50,具體用于接收所述源數(shù)據(jù)庫返回的心跳包,且所述心跳包中攜帶有所述源數(shù)據(jù)庫對應(yīng)的MAC地址;根據(jù)接收到的所述源數(shù)據(jù)庫對應(yīng)的MAC地址和自身對應(yīng)的MAC地址,執(zhí)行哈希算法,得到當(dāng)前的哈希值;判斷所述當(dāng)前的哈希值是否與預(yù)先確定的標(biāo)準(zhǔn)值相同,若否,確定所述源數(shù)據(jù)庫出現(xiàn)故障。
在本發(fā)明一個實施例中,所述目標(biāo)數(shù)據(jù)庫50,進一步用于當(dāng)判斷出未接收到所述源數(shù)據(jù)庫返回的心跳包時,確定當(dāng)前的心跳請求時間間隔,且所述當(dāng)前的心跳請求時間間隔小于對應(yīng)的上一個心跳請求時間間隔,基于所述當(dāng)前的心跳請求時間間隔,向所述源數(shù)據(jù)庫發(fā)送心跳請求,并如此循環(huán);在判斷出連續(xù)至少兩次未接收到所述源數(shù)據(jù)庫返回的心跳包時,確定所述源數(shù)據(jù)庫出現(xiàn)故障。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
綜上所述,本發(fā)明的各個實施例至少具有如下有益效果:
1、本發(fā)明實施例中,根據(jù)源數(shù)據(jù)庫的日志文件,獲取其中的每一項寫操作對應(yīng)的記錄信息;根據(jù)獲取的每一項寫操作對應(yīng)的記錄信息,確定其中的至少一類記錄信息,且每一類記錄信息對應(yīng)于同一寫操作類型;根據(jù)每一類記錄信息對應(yīng)的寫操作類型,建立該類記錄信息的共用索引,并對該類記錄信息進行壓縮;將壓縮后的每一類記錄信息發(fā)送給源數(shù)據(jù)庫對應(yīng)的目標(biāo)數(shù)據(jù)庫。目標(biāo)數(shù)據(jù)庫根據(jù)接收到的記錄信息,通過執(zhí)行對應(yīng)的寫操作,可以實現(xiàn)源數(shù)據(jù)庫的備份。與日志文件相比,壓縮后的記錄信息的占用空間顯著減小,故記錄信息的發(fā)送可以占用較少的網(wǎng)絡(luò)資源。因此,本發(fā)明能夠減少對網(wǎng)絡(luò)資源的占用。
2、本發(fā)明實施例中,通過對源數(shù)據(jù)庫的日志文件進行壓縮,并將壓縮后的日志文件傳輸至目標(biāo)數(shù)據(jù)庫,以實現(xiàn)從源數(shù)據(jù)庫至目標(biāo)數(shù)據(jù)庫的實時備份。這一實現(xiàn)方式可以消耗較少的數(shù)據(jù)庫資源,為數(shù)據(jù)庫的實時同步提供便利,故可以為一種高效的數(shù)據(jù)庫備份方法。
3、本發(fā)明實施例中,正常情況下,可以設(shè)置相對較長的心跳請求時間間隔,以周期性檢測源數(shù)據(jù)庫是否處于正常工作狀態(tài)。但當(dāng)檢測到未接收到源數(shù)據(jù)庫發(fā)來的心跳包時,可以通過心跳請求時間間隔依次遞減的實現(xiàn)方式,快速驗證源數(shù)據(jù)庫是否出現(xiàn)故障,以便于能夠及時發(fā)現(xiàn)故障并解除故障。
4、本發(fā)明實施例中,基于本發(fā)明實施例的實現(xiàn)方式,可以在異構(gòu)的IT基礎(chǔ)結(jié)構(gòu)之間實現(xiàn)大量數(shù)據(jù)亞秒一級的實時復(fù)制,其中,該異構(gòu)的IT基礎(chǔ)結(jié)構(gòu)可以包括幾乎所有常用操作系統(tǒng)平臺和數(shù)據(jù)庫平臺。因此,本發(fā)明實施例可以在應(yīng)急系統(tǒng)、在線報表、實時數(shù)據(jù)倉庫供應(yīng)、交易跟蹤、數(shù)據(jù)同步、集中/分發(fā)、容災(zāi)、數(shù)據(jù)庫升級和移植、雙業(yè)務(wù)中心等各種場景下進行應(yīng)用。此外,還可以實現(xiàn)一對一、一對多、多對一、雙向、點對點、級聯(lián)等多種靈活的拓撲結(jié)構(gòu)。
需要說明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個〃·····”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲在計算機可讀取的存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)中。
最后需要說明的是:以上所述僅為本發(fā)明的較佳實施例,僅用于說明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。