數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備的制作方法
【專利摘要】本申請公開了一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法,其特征在于,包括:接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;依據(jù)該狀態(tài)代碼而將二進制日志文本的至少一部分解析成明文文本;依據(jù)該明文文本而產(chǎn)生逆向文本,逆向文本和明文文本的事務(wù)的執(zhí)行次序相反;依據(jù)所述二進制日志文件以及逆向文本,執(zhí)行該逆向文本以將數(shù)據(jù)庫恢復(fù)該狀態(tài)代碼所指示的數(shù)據(jù)狀態(tài)。
【專利說明】數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備
【技術(shù)領(lǐng)域】
[0001]本申請涉及數(shù)據(jù)庫,尤其涉及數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備。
【背景技術(shù)】
[0002]隨著科技的進步與信息化的發(fā)展,各式各樣的信息不斷地被產(chǎn)生及重復(fù)利用,用來存儲信息的數(shù)據(jù)庫也因此扮演著重要的角色。
[0003]數(shù)據(jù)庫可以存儲非常大量的信息,而能夠藉由適當(dāng)?shù)牟僮鞫鴮⑺璧男畔⑻峁┙o使用者或其他的應(yīng)用。然而,有時因為發(fā)生錯誤的操作或者系統(tǒng)需要維護等原因,而會需要將數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)至前一段時間的狀態(tài)。此時,若數(shù)據(jù)庫無法以快速且正確的方式恢復(fù)數(shù)據(jù),將造成數(shù)據(jù)庫長時間無法提供正確的數(shù)據(jù),而造成使用者的不便利或者造成其他相關(guān)的應(yīng)用無法正常運作。
[0004]MySQL數(shù)據(jù)庫是一種被廣泛采用的開源數(shù)據(jù)庫,當(dāng)MySQL數(shù)據(jù)庫需要恢復(fù)數(shù)據(jù)時,通常會依據(jù)mysqldump備份數(shù)據(jù)和binlog 二進制日志文本進行數(shù)據(jù)恢復(fù)工作,或是由其他的機器復(fù)制所需的數(shù)據(jù),或者也可以采用人工修復(fù)的方式。然而,上述的恢復(fù)方式皆需要耗費很長的時間,造成數(shù)據(jù)庫長時間無法正常的運作。
【發(fā)明內(nèi)容】
[0005]本申請的主要目的在于提供一種數(shù)據(jù)恢復(fù)的方法及設(shè)備,以便正確且有效率地進行MySQL數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)工作,而解決現(xiàn)有技術(shù)存在的數(shù)據(jù)恢復(fù)時間過長的問題,其中:
[0006]在本申請的一個方面中,提供一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法,其特征在于,包括:
[0007]接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;
[0008]依據(jù)該狀態(tài)代碼而將二進制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及第二事務(wù),該第一事務(wù)包含一個或多個第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個或多個第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個或多個第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個或多個第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行;
[0009]依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個或多個第一數(shù)據(jù)庫命令的一個或多個第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個或多個第二數(shù)據(jù)庫命令的一個或多個第四數(shù)據(jù)庫命令;以及
[0010]依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個或多個第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個或多個第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
[0011]進一步地,在根據(jù)本申請的方法中,還包括:將該第一事務(wù)的該一個或多個第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個或多個第二數(shù)據(jù)庫命令進行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行邏輯反置;將該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令進行次序反置;將該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行次序反置;以及將該第三事務(wù)及該四事務(wù)進行次序反置以產(chǎn)生該逆向文本。
[0012]進一步地,在根據(jù)本申請的方法中,還包括:依據(jù)相反于該第一次序的方式將該第三事務(wù)及該第四事務(wù)記錄于該逆向文本;依據(jù)相反于該第二次序的方式將該一個或多個第三數(shù)據(jù)庫命令記錄于該逆向文本;以及依據(jù)相反于該第三次序的方式將該一個或多個第四數(shù)據(jù)庫命令記錄于該逆向文本。
[0013]進一步地,在根據(jù)本申請的方法中,還包括:替換該明文文本的一個或多個轉(zhuǎn)義字符,使該一個或多個第三數(shù)據(jù)庫命令及該一個或多個第四數(shù)據(jù)庫命令可以直接執(zhí)行。
[0014]進一步地,在根據(jù)本申請的方法中,還包括:將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令;將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令;以及提取一個或多個數(shù)據(jù)庫的字段代號、數(shù)據(jù)庫名和表名,以替換該一個或多個第三數(shù)據(jù)命令及該一個或多個第四數(shù)據(jù)命令的字段名。
[0015]進一步地,在根據(jù)本申請的方法中,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實施,該二進制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進制日志文本。
[0016]在本申請的另一個方面中,提供一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,還包括:
[0017]數(shù)據(jù)恢復(fù)模塊,用以接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;
[0018]二進制日志文本解析模塊,依據(jù)該狀態(tài)代碼而將二進制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及一第二事務(wù),該第一事務(wù)包含一個或多個第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個或多個第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個或多個第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個或多個第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行;
[0019]逆向文本產(chǎn)生模塊,依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個或多個第一數(shù)據(jù)庫命令的一個或多個第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個或多個第二數(shù)據(jù)庫命令的一個或多個第四數(shù)據(jù)庫命令;以及
[0020]數(shù)據(jù)恢復(fù)模塊,依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個或多個第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個或多個第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
[0021]進一步地,在根據(jù)本申請的設(shè)備中,該逆向文本產(chǎn)生模塊將該第一事務(wù)的該一個或多個第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個或多個第二數(shù)據(jù)庫命令進行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行邏輯反置;該逆向文本產(chǎn)生模塊將該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令進行次序反置;該逆向文本產(chǎn)生模塊將該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行次序反置;以及該逆向文本產(chǎn)生模塊還將該第三事務(wù)及該四事務(wù)進行次序反置以產(chǎn)生該逆向文本。
[0022]進一步地,在根據(jù)本申請的設(shè)備中,該第三事務(wù)及該第四事務(wù)以相反于該第一次序的方式記錄于該逆向文本;該一個或多個第三數(shù)據(jù)庫命令以相反于該第二次序的方式記錄于該逆向文本;以及該一個或多個第四數(shù)據(jù)庫命令以相反于該第三次序的方式記錄于該逆向文本。
[0023]進一步地,在根據(jù)本申請的設(shè)備中,該二進制日志文本解析模塊替換該明文文本的一個或多個轉(zhuǎn)義字符,使該一個或多個第三數(shù)據(jù)庫命令及該一個或多個第四數(shù)據(jù)庫命令可以直接執(zhí)行。
[0024]進一步地,在根據(jù)本申請的設(shè)備中,該逆向文本產(chǎn)生模塊將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令,將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令,以及提取一個或多個數(shù)據(jù)庫的字段代號、數(shù)據(jù)庫名和表名,以替換該一個或多個第三數(shù)據(jù)命令及該一個或多個第四數(shù)據(jù)命令的字段名。
[0025]進一步地,在根據(jù)本申請的設(shè)備中,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實施,該二進制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進制日志文本。
[0026]與現(xiàn)有技術(shù)相比,根據(jù)本申請的技術(shù)方案,能夠有效地降低數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)時間。
【專利附圖】
【附圖說明】
[0027]此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
[0028]圖1為本申請實施例的數(shù)據(jù)恢復(fù)方法簡化后的流程圖。
[0029]圖2?圖4為圖1中依據(jù)明文文本而產(chǎn)生逆向文本的流程的實施例簡化后的示意圖。
[0030]圖5為本申請實施例的數(shù)據(jù)庫系統(tǒng)簡化后的功能方塊圖。
【具體實施方式】
[0031]本申請的主要思想在于,提供一種數(shù)據(jù)恢復(fù)的方法及設(shè)備以正確且有效率地進行MySQL數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)工作。
[0032]為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,以下結(jié)合附圖及具體實施例,對本申請作進一步地詳細(xì)說明。
[0033]許多系統(tǒng)應(yīng)用都會使用數(shù)據(jù)庫來存儲各種信息,系統(tǒng)中的應(yīng)用程序可以通過數(shù)據(jù)庫命令將信息寫入數(shù)據(jù)庫,也能夠通過數(shù)據(jù)庫命令由數(shù)據(jù)庫讀取所需的信息。這些系統(tǒng)應(yīng)用可以使用一個或多個計算機主機進行運作,計算機主機還可以利用多處理器、多機器、多執(zhí)行及/或并行執(zhí)行等技術(shù)來提升整個系統(tǒng)的可用性及處理能力。例如,可以將數(shù)據(jù)庫運行于多個計算機主機上,并且將應(yīng)用程序也運行于多個計算機主機上,以提升系統(tǒng)應(yīng)用的性能。計算機主機可以運行Linux或Windows等操作系統(tǒng),而數(shù)據(jù)庫目前僅適用在MySQL的數(shù)據(jù)庫系統(tǒng)。
[0034]數(shù)據(jù)庫所存儲的數(shù)據(jù)量,會隨著系統(tǒng)運行的時間而不斷地增加,許多數(shù)據(jù)庫每日新增的數(shù)據(jù)量動輒以十億字節(jié)(gigabyte)或兆兆(terabyte)字節(jié)計算。當(dāng)數(shù)據(jù)庫異常巖機而重新開機時,或者當(dāng)使用者需要將數(shù)據(jù)庫恢復(fù)到特定時間的存儲狀態(tài)時,必須要依據(jù)一個確定的順序串列地進行數(shù)據(jù)的恢復(fù),才能夠確保數(shù)據(jù)庫能夠正確地恢復(fù)至所需的存儲狀態(tài)。
[0035]現(xiàn)有的各種數(shù)據(jù)庫雖然都提供存儲數(shù)據(jù)的功能,然而每種數(shù)據(jù)庫的設(shè)計構(gòu)思、組成結(jié)構(gòu)及可使用的命令等,都有可能存在很大的差異。以下將針對MySQL數(shù)據(jù)庫或者依據(jù)MySQL數(shù)據(jù)庫為基礎(chǔ)所發(fā)展的數(shù)據(jù)庫,提出數(shù)據(jù)恢復(fù)的技術(shù)方案。
[0036]MySQL數(shù)據(jù)庫主要藉由二進制日志(binary log)的結(jié)構(gòu),而記錄MySQL數(shù)據(jù)庫中事件或數(shù)據(jù)的變動,以能夠提供復(fù)制和備份等功能。二進制日志的結(jié)構(gòu)可以包含有多個二進制日志文件(binlog)及一個二進制日志索引文件(binlog index),當(dāng)MySQL數(shù)據(jù)庫接收到刷新日志(flush log)等命令時,MySQL數(shù)據(jù)庫就會產(chǎn)生新的二進制日志文件,而二進制日志索引文件則用來記錄所有的二進制日志文件的索引,例如,該索引可以是二進制日志文件的文件名稱。
[0037]在MySQL數(shù)據(jù)庫中,二進制日志文件通常有三種存儲模式,分別是行(row)模式、陳述(statement)模式和混和(mix)模式。行模式的二進制日志文件會記錄MySQL數(shù)據(jù)庫中每一行數(shù)據(jù)被修改的信息,陳述模式會記錄MySQL數(shù)據(jù)庫中每一條會修改數(shù)據(jù)的數(shù)據(jù)庫命令,而混和模式則是行模式和陳述模式的結(jié)合。由于行模式記錄了 MySQL數(shù)據(jù)庫中數(shù)據(jù)變化前后的信息,所以可以根據(jù)行模式中記錄的數(shù)據(jù)值和操作類型而將數(shù)據(jù)恢復(fù)至所需的狀態(tài)(或稱數(shù)據(jù)回滾,rollback)。以下,將說明如何依據(jù)MySQL數(shù)據(jù)庫中以行模式存儲的二進制日志文件,而進行MySQL數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)。
[0038]圖1為本申請的數(shù)據(jù)恢復(fù)方法的實施例簡化后的流程圖。
[0039]在流程110中,數(shù)據(jù)庫接收到一個數(shù)據(jù)恢復(fù)命令,數(shù)據(jù)恢復(fù)命令中包含有狀態(tài)代碼,以指定所需恢復(fù)的數(shù)據(jù)狀態(tài)。例如,數(shù)據(jù)恢復(fù)命令可以指定數(shù)據(jù)庫應(yīng)該恢復(fù)至“記錄位置”為1000的數(shù)據(jù)狀態(tài)。
[0040]在流程120中,依據(jù)數(shù)據(jù)恢復(fù)命令而解析對應(yīng)的二進制日志文件,以將二進制日志文件解析為對應(yīng)的明文文本。例如,可以采用MySQL數(shù)據(jù)庫自帶的數(shù)據(jù)庫命令mysqlbinlog,而將二進制日志文件解析為對應(yīng)的明文文本。此外,在流程120中,僅需將與數(shù)據(jù)恢復(fù)命令相關(guān)的二進制日志文件的部分內(nèi)容進行解析,因此可以降低運算量。
[0041]在流程130中,依據(jù)流程120的明文文本而產(chǎn)生逆向文本,逆向文本和明文文本的事務(wù)(transaction)的執(zhí)行次序相反,逆向文本的每個事務(wù)中的數(shù)據(jù)庫命令與明文文本中對應(yīng)事務(wù)的數(shù)據(jù)庫命令邏輯上相反并且執(zhí)行次序也是相反的。
[0042]在流程140中,依據(jù)現(xiàn)有的二進制日志文件以及逆向文本,執(zhí)行逆向文本以將數(shù)據(jù)庫恢復(fù)至流程110中數(shù)據(jù)恢復(fù)命令所指定的數(shù)據(jù)狀態(tài)。
[0043]在流程120中,進行二進制日志文件解析為對應(yīng)的明文文本的運作。然而,數(shù)據(jù)庫的數(shù)據(jù)存在有轉(zhuǎn)義字符,轉(zhuǎn)義字符是在字母前加"\"、"\X"、或"\X0"等符號來表示,因此轉(zhuǎn)義字符與原來字母所代表的意思已經(jīng)不相同了。二進制日志文件包含有與數(shù)據(jù)庫的數(shù)據(jù)完全一致的記錄,而包含有轉(zhuǎn)義字符。因此,如果通過MySQL自帶的mysqlbinlog工具解析二進制日志文件所得到的數(shù)據(jù)因為包含有轉(zhuǎn)義字符,而無法得到可以直接執(zhí)行的數(shù)據(jù)庫命令。
[0044]在一個實施例中,可以通過⑶B等調(diào)試程序工具對MySQL自帶的mysqlbinlog工具進行修改,或者使用其他自帶的腳本等工具進行所需的解析運作,將二進制日志文件進行解析,并且還原轉(zhuǎn)義字符,以獲得可以直接執(zhí)行的數(shù)據(jù)庫命令。
[0045]例如,在一個實施例中,要將一條命令insert into tx values (’a\bb’)進行解析,通過MySQL自帶的mysqlbinlog工具所解析的文本會是"INSERT INTOtest.tx〃、〃SET〃及〃@l=’a\x08b〃',由于文本中包含有轉(zhuǎn)義字符〃xOb〃而無法直接執(zhí)行。因此,可以修改mysqlbinlog工具或是使用其他的腳本,將轉(zhuǎn)義字符〃x0b〃還原為〃b〃,使流程120中解析后的文本成為〃INSERT INTO test.tx〃、〃SET〃及〃@1=’a\bb"',而成為直接可以執(zhí)行的數(shù)據(jù)庫命令。
[0046]圖2?圖4為流程130中依據(jù)明文文本而產(chǎn)生逆向文本的一實施例簡化后的示意圖,以下將以圖2?圖4進一步說明流程130中逆向文本的產(chǎn)生方式。
[0047]在圖2中,明文文本210中包含有三個事務(wù)212、214和216,其Tl、T2和T3分別代表事務(wù)212、214和216的環(huán)境參數(shù)。而明文文本210的Sf S6為數(shù)據(jù)庫命令,例如,插入(insert)、刪除(delete)和更新(update)等。每個事務(wù)分別在自身的環(huán)境參數(shù)下執(zhí)行包含于BEGIN (開始)及END (結(jié)束)之間的數(shù)據(jù)庫命令。
[0048]在圖2中,可以將明文文本210經(jīng)由流程131的處理,而將分別在事務(wù)212、214和216處進行數(shù)據(jù)庫命令的邏輯反置。插入的邏輯反置是刪除、刪除的邏輯反置是插入、以及更新的邏輯反置仍是更新。例如,插入2的數(shù)據(jù)庫命令的邏輯反置即為刪除2。
[0049]例如,在一個實施例中,要將命令insert into ccc values (2,〃\\〃)進行流程131的邏輯反置運作,由于數(shù)據(jù)庫命令插入的邏輯反置是刪除,因此經(jīng)過邏輯反置后的結(jié)果為delete from ccc where id=2and name=' \\'。
[0050]此外,數(shù)據(jù)庫中每個表的字段名會被替換成〃@1"等字符,因此,在流程131中還需要將@1替換成原來的字段名。例如,在一個實施例中,可以透過peri等語言通過正則表達(dá)式提取所需的字段代號、數(shù)據(jù)庫名和表名等信息,再通過GetTableField等函數(shù)查詢數(shù)據(jù)庫的INF0RMAT10N_SCHEMA表以獲得所需的字段信息,并且將字段信息存入另一個對照表,而利用對照表實現(xiàn)將"@1"等字符替換為字段名的運作。
[0051]因此,可以將明文文本210經(jīng)由流程131的處理而獲得文本220,文本220中數(shù)據(jù)庫命令SI,飛6’分別代表其對應(yīng)于文本210中數(shù)據(jù)庫命令Sf S6的邏輯反置。
[0052]在圖3中,可以將文本220經(jīng)由流程133的處理,而將分別在事務(wù)222、224和226處進行數(shù)據(jù)庫命令的次序反置。例如,在事務(wù)224中,將數(shù)據(jù)庫命令的次序由(S2’,S3’)反置為(S3’,S2’),并且在事務(wù)226中,將數(shù)據(jù)庫命令的次序由(S4’,S5’,S6’)反置為(S6’,S5’,S4’)。因此,可以將明文文本220經(jīng)由流程133的處理而獲得文本320。
[0053]在圖4中,可以將文本320經(jīng)由流程135的處理,而將分別在事務(wù)322、324和326處進行事務(wù)次序的反置。例如,將文本320的事務(wù)次序322、324和326反置為326、324和322,而成為逆向文本420中的事務(wù)422、424和426。
[0054]在圖2?圖4的實施例中,流程131、133和135的順序也可以交換,也能依據(jù)明文文本產(chǎn)生對應(yīng)的逆向文本。例如,先執(zhí)行流程135的事務(wù)次序的反置,再執(zhí)行流程131的數(shù)據(jù)庫命令邏輯反置,然后再執(zhí)行流程133的數(shù)據(jù)庫命令次序反置,同樣能夠依據(jù)明文文本210而產(chǎn)生相同的逆向文本420。
[0055]由于二進制日志文件的行模式可以記錄MySQL數(shù)據(jù)庫中數(shù)據(jù)變化前后的信息,所以在流程140中,可以根據(jù)行模式中記錄的數(shù)據(jù)值以及逆向文本中的事務(wù)和數(shù)據(jù)庫命令,藉由執(zhí)行逆向文本中次序反置的事務(wù),并且執(zhí)行事務(wù)中次序反置并且邏輯反置的數(shù)據(jù)庫命令,而將數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)至所需的狀態(tài)。
[0056]在上述的實施例中,進行文本解析、逆向或數(shù)據(jù)恢復(fù)的運作,可以使用MySQL數(shù)據(jù)庫自帶的工具或者使用其他自定的腳本等工具,例如,使用Perl語言等由正則表達(dá)式提取文本中所需的信息及進行字段的替換等工作。
[0057]圖5為本申請的一個實施例的數(shù)據(jù)庫系統(tǒng)500簡化后的功能方塊圖。數(shù)據(jù)庫系統(tǒng)500包含可以采用一個或多個計算機設(shè)備及軟件實施,并且計算機設(shè)備可以采移動式或非移動式的設(shè)備,例如,服務(wù)器、個人計算機、筆記本電腦或手機等設(shè)備。
[0058]數(shù)據(jù)庫系統(tǒng)500可以包含數(shù)據(jù)恢復(fù)命令接收模塊510、二進制日志文本解析模塊520、逆向文本產(chǎn)生模塊530及數(shù)據(jù)恢復(fù)模塊540,而能夠進行數(shù)據(jù)的恢復(fù)。
[0059]數(shù)據(jù)恢復(fù)命令接收模塊510可以用以執(zhí)行流程110的運作,從而能夠接收數(shù)據(jù)恢復(fù)命令。
[0060]二進制日志文本解析模塊520可用以執(zhí)行流程120的運作,依據(jù)數(shù)據(jù)恢復(fù)命令而解析對應(yīng)的二進制日志文件,以將二進制日志文件解析為對應(yīng)的明文文本,并且還可以將轉(zhuǎn)義字符進行轉(zhuǎn)換。
[0061]逆向文本產(chǎn)生模塊530可用以執(zhí)行流程130的運作,進行邏輯反置、替換字段名、事務(wù)內(nèi)的數(shù)據(jù)庫命令次序反置及事務(wù)的次序反置等運作,從而能夠依據(jù)上述的實施方式將明文文本而產(chǎn)生逆向文本。
[0062]數(shù)據(jù)恢復(fù)模塊540可用以執(zhí)行流程140的運作,從而能夠依據(jù)現(xiàn)有的二進制日志文件以及逆向文本,執(zhí)行逆向文本以將數(shù)據(jù)庫恢復(fù)至流程110中數(shù)據(jù)恢復(fù)命令所指定的數(shù)據(jù)狀態(tài)。
[0063]在上述的實施例中,雖然在流程140中會執(zhí)行逆向文本中次序反置的事務(wù),并且執(zhí)行事務(wù)中次序反置并且邏輯反置的數(shù)據(jù)庫命令,而將數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)至所需的狀態(tài)。然而,事務(wù)和數(shù)據(jù)庫命令在逆向文本中的記錄方式也可以設(shè)置為依據(jù)其他的方式記錄。但是,當(dāng)數(shù)據(jù)庫進行數(shù)據(jù)恢復(fù)時,仍舊會以反置的次序執(zhí)行明文文本中的事務(wù),并且以反置的次序及反置的邏輯執(zhí)行事務(wù)中的數(shù)據(jù)庫命令
[0064]由于數(shù)據(jù)庫所存儲的數(shù)據(jù)量很大,通常動輒以十億字節(jié)(gigabyte)或兆兆(terabyte)計算。若以目前的數(shù)據(jù)恢復(fù)方式,依據(jù)MySQL數(shù)據(jù)庫的mysqldump備份數(shù)據(jù)和二進制日志文本進行數(shù)據(jù)恢復(fù)工作,以數(shù)十億位元組至數(shù)百億位元組的mysqldump備份數(shù)據(jù),搭配二進制日志文本進行數(shù)據(jù)恢復(fù),即便只有少數(shù)的數(shù)據(jù)需要恢復(fù),數(shù)據(jù)庫仍然需要至少數(shù)小時至數(shù)天進行數(shù)據(jù)恢復(fù)而無法正常運作。即便是由其他的機器復(fù)制所需的數(shù)據(jù),或采用人工修復(fù)的方式,也無法有效的降低數(shù)據(jù)恢復(fù)的時間。
[0065]然而,依據(jù)上述的實施例產(chǎn)生逆向文本,再搭配二進制日志文本進行數(shù)據(jù)恢復(fù)的方式,可以使數(shù)據(jù)恢復(fù)的時間與需要恢復(fù)的數(shù)據(jù)量成正比,進而大幅縮短數(shù)據(jù)恢復(fù)時間。若只有少數(shù)的數(shù)據(jù)需要恢復(fù),甚至可以達(dá)到分鐘級別的恢復(fù)時間,使數(shù)據(jù)庫能夠快速的再次正常運作,從而達(dá)到高可用性的標(biāo)準(zhǔn)。
[0066]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
[0067]以上所述僅為本申請的實施例而已,并不用于限制本申請,對于本領(lǐng)域的技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法,其特征在于,包括: 接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼; 依據(jù)該狀態(tài)代碼將二進制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及第二事務(wù),該第一事務(wù)包含一個或多個第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個或多個第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個或多個第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個或多個第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行; 依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個或多個第一數(shù)據(jù)庫命令的一個或多個第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個或多個第二數(shù)據(jù)庫命令的一個或多個第四數(shù)據(jù)庫命令;以及依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個或多個第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個或多個第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 將該第一事務(wù)的該一個或多個第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個或多個第二數(shù)據(jù)庫命令進行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行邏輯反置; 將該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令進行次序反置; 將該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行次序反置;以及 將該第三事務(wù)及該四事務(wù)進行次序反置以產(chǎn)生該逆向文本。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 依據(jù)相反于該第一次序的方式將該第三事務(wù)及該第四事務(wù)記錄于該逆向文本; 依據(jù)相反于該第二次序的方式將該一個或多個第三數(shù)據(jù)庫命令記錄于該逆向文本;以及 依據(jù)相反于該第三次序的方式將該一個或多個第四數(shù)據(jù)庫命令記錄于該逆向文本。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 替換該明文文本的一個或多個轉(zhuǎn)義字符,使該一個或多個第三數(shù)據(jù)庫命令及該一個或多個第四數(shù)據(jù)庫命令可以直接執(zhí)行。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令; 將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令;以及 提取一個或多個數(shù)據(jù)庫的字段代號、數(shù)據(jù)庫名和表名,以替換該一個或多個第三數(shù)據(jù)命令及該一個或多個第四數(shù)據(jù)命令的字段名。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實施,該二進制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進制日志文本。
7.一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,還包括: 數(shù)據(jù)恢復(fù)命令接收模塊,用以接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;二進制日志文本解析模塊,依據(jù)該狀態(tài)代碼將二進制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及第二事務(wù),該第一事務(wù)包含一個或多個第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個或多個第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個或多個第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個或多個第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行; 逆向文本產(chǎn)生模塊,依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個或多個第一數(shù)據(jù)庫命令的一個或多個第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個或多個第二數(shù)據(jù)庫命令的一個或多個第四數(shù)據(jù)庫命令;以及 數(shù)據(jù)恢復(fù)模塊,依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個或多個第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個或多個第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
8.如權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該逆向文本產(chǎn)生模塊將該第一事務(wù)的該一個或多個第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個或多個第二數(shù)據(jù)庫命令進行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行邏輯反置;該逆向文本產(chǎn)生模塊將該第三事務(wù)的該一個或多個第三數(shù)據(jù)庫命令進行次序反置;該逆向文本產(chǎn)生模塊將該第四事務(wù)的該一個或多個第四數(shù)據(jù)庫命令進行次序反置;以及該逆向文本產(chǎn)生模塊還將該第三事務(wù)及該四事務(wù)進行次序反置以產(chǎn)生該逆向文本。
9.如權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該第三事務(wù)及該第四事務(wù)以相反于該第一次序的方式記錄 于該逆向文本;該一個或多個第三數(shù)據(jù)庫命令以相反于該第二次序的方式記錄于該逆向文本;以及該一個或多個第四數(shù)據(jù)庫命令以相反于該第三次序的方式記錄于該逆向文本。
10.根據(jù)權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該二進制日志文本解析模塊替換該明文文本的一個或多個轉(zhuǎn)義字符,使該一個或多個第三數(shù)據(jù)庫命令及該一個或多個第四數(shù)據(jù)庫命令可以直接執(zhí)行。
11.根據(jù)權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該逆向文本產(chǎn)生模塊將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令,將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令,以及提取一個或多個數(shù)據(jù)庫的字段代號、數(shù)據(jù)庫名和表名,以替換該一個或多個第三數(shù)據(jù)命令及該一個或多個第四數(shù)據(jù)命令的字段名。
12.如權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實施,該二進制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進制日志文本。
【文檔編號】G06F17/30GK103838780SQ201210490745
【公開日】2014年6月4日 申請日期:2012年11月27日 優(yōu)先權(quán)日:2012年11月27日
【發(fā)明者】陳錦賦 申請人:阿里巴巴集團控股有限公司