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

數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備的制作方法

文檔序號(hào):6491780閱讀:191來源:國知局
數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備的制作方法
【專利摘要】本申請(qǐng)公開了一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法,其特征在于,包括:接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;依據(jù)該狀態(tài)代碼而將二進(jìn)制日志文本的至少一部分解析成明文文本;依據(jù)該明文文本而產(chǎn)生逆向文本,逆向文本和明文文本的事務(wù)的執(zhí)行次序相反;依據(jù)所述二進(jìn)制日志文件以及逆向文本,執(zhí)行該逆向文本以將數(shù)據(jù)庫恢復(fù)該狀態(tài)代碼所指示的數(shù)據(jù)狀態(tài)。
【專利說明】數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)庫,尤其涉及數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法及相關(guān)的設(shè)備。
【背景技術(shù)】
[0002]隨著科技的進(jìn)步與信息化的發(fā)展,各式各樣的信息不斷地被產(chǎn)生及重復(fù)利用,用來存儲(chǔ)信息的數(shù)據(jù)庫也因此扮演著重要的角色。
[0003]數(shù)據(jù)庫可以存儲(chǔ)非常大量的信息,而能夠藉由適當(dāng)?shù)牟僮鞫鴮⑺璧男畔⑻峁┙o使用者或其他的應(yīng)用。然而,有時(shí)因?yàn)榘l(fā)生錯(cuò)誤的操作或者系統(tǒng)需要維護(hù)等原因,而會(huì)需要將數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)至前一段時(shí)間的狀態(tài)。此時(shí),若數(shù)據(jù)庫無法以快速且正確的方式恢復(fù)數(shù)據(jù),將造成數(shù)據(jù)庫長(zhǎng)時(shí)間無法提供正確的數(shù)據(jù),而造成使用者的不便利或者造成其他相關(guān)的應(yīng)用無法正常運(yùn)作。
[0004]MySQL數(shù)據(jù)庫是一種被廣泛采用的開源數(shù)據(jù)庫,當(dāng)MySQL數(shù)據(jù)庫需要恢復(fù)數(shù)據(jù)時(shí),通常會(huì)依據(jù)mysqldump備份數(shù)據(jù)和binlog 二進(jìn)制日志文本進(jìn)行數(shù)據(jù)恢復(fù)工作,或是由其他的機(jī)器復(fù)制所需的數(shù)據(jù),或者也可以采用人工修復(fù)的方式。然而,上述的恢復(fù)方式皆需要耗費(fèi)很長(zhǎng)的時(shí)間,造成數(shù)據(jù)庫長(zhǎng)時(shí)間無法正常的運(yùn)作。

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

[0005]本申請(qǐng)的主要目的在于提供一種數(shù)據(jù)恢復(fù)的方法及設(shè)備,以便正確且有效率地進(jìn)行MySQL數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)工作,而解決現(xiàn)有技術(shù)存在的數(shù)據(jù)恢復(fù)時(shí)間過長(zhǎng)的問題,其中:
[0006]在本申請(qǐng)的一個(gè)方面中,提供一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)方法,其特征在于,包括:
[0007]接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;
[0008]依據(jù)該狀態(tài)代碼而將二進(jìn)制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及第二事務(wù),該第一事務(wù)包含一個(gè)或多個(gè)第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個(gè)或多個(gè)第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行;
[0009]依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令的一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令的一個(gè)或多個(gè)第四數(shù)據(jù)庫命令;以及
[0010]依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
[0011]進(jìn)一步地,在根據(jù)本申請(qǐng)的方法中,還包括:將該第一事務(wù)的該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令進(jìn)行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行邏輯反置;將該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令進(jìn)行次序反置;將該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行次序反置;以及將該第三事務(wù)及該四事務(wù)進(jìn)行次序反置以產(chǎn)生該逆向文本。
[0012]進(jìn)一步地,在根據(jù)本申請(qǐng)的方法中,還包括:依據(jù)相反于該第一次序的方式將該第三事務(wù)及該第四事務(wù)記錄于該逆向文本;依據(jù)相反于該第二次序的方式將該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令記錄于該逆向文本;以及依據(jù)相反于該第三次序的方式將該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令記錄于該逆向文本。
[0013]進(jìn)一步地,在根據(jù)本申請(qǐng)的方法中,還包括:替換該明文文本的一個(gè)或多個(gè)轉(zhuǎn)義字符,使該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令可以直接執(zhí)行。
[0014]進(jìn)一步地,在根據(jù)本申請(qǐng)的方法中,還包括:將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令;將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令;以及提取一個(gè)或多個(gè)數(shù)據(jù)庫的字段代號(hào)、數(shù)據(jù)庫名和表名,以替換該一個(gè)或多個(gè)第三數(shù)據(jù)命令及該一個(gè)或多個(gè)第四數(shù)據(jù)命令的字段名。
[0015]進(jìn)一步地,在根據(jù)本申請(qǐng)的方法中,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實(shí)施,該二進(jìn)制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進(jìn)制日志文本。
[0016]在本申請(qǐng)的另一個(gè)方面中,提供一種數(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ìn)制日志文本解析模塊,依據(jù)該狀態(tài)代碼而將二進(jìn)制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及一第二事務(wù),該第一事務(wù)包含一個(gè)或多個(gè)第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個(gè)或多個(gè)第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行;
[0019]逆向文本產(chǎn)生模塊,依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令的一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令的一個(gè)或多個(gè)第四數(shù)據(jù)庫命令;以及
[0020]數(shù)據(jù)恢復(fù)模塊,依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
[0021]進(jìn)一步地,在根據(jù)本申請(qǐng)的設(shè)備中,該逆向文本產(chǎn)生模塊將該第一事務(wù)的該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令進(jìn)行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行邏輯反置;該逆向文本產(chǎn)生模塊將該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令進(jìn)行次序反置;該逆向文本產(chǎn)生模塊將該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行次序反置;以及該逆向文本產(chǎn)生模塊還將該第三事務(wù)及該四事務(wù)進(jìn)行次序反置以產(chǎn)生該逆向文本。
[0022]進(jìn)一步地,在根據(jù)本申請(qǐng)的設(shè)備中,該第三事務(wù)及該第四事務(wù)以相反于該第一次序的方式記錄于該逆向文本;該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令以相反于該第二次序的方式記錄于該逆向文本;以及該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令以相反于該第三次序的方式記錄于該逆向文本。
[0023]進(jìn)一步地,在根據(jù)本申請(qǐng)的設(shè)備中,該二進(jìn)制日志文本解析模塊替換該明文文本的一個(gè)或多個(gè)轉(zhuǎn)義字符,使該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令可以直接執(zhí)行。
[0024]進(jìn)一步地,在根據(jù)本申請(qǐng)的設(shè)備中,該逆向文本產(chǎn)生模塊將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令,將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令,以及提取一個(gè)或多個(gè)數(shù)據(jù)庫的字段代號(hào)、數(shù)據(jù)庫名和表名,以替換該一個(gè)或多個(gè)第三數(shù)據(jù)命令及該一個(gè)或多個(gè)第四數(shù)據(jù)命令的字段名。
[0025]進(jìn)一步地,在根據(jù)本申請(qǐng)的設(shè)備中,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實(shí)施,該二進(jìn)制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進(jìn)制日志文本。
[0026]與現(xiàn)有技術(shù)相比,根據(jù)本申請(qǐng)的技術(shù)方案,能夠有效地降低數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)時(shí)間。
【專利附圖】

【附圖說明】
[0027]此處所說明的附圖用來提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
[0028]圖1為本申請(qǐng)實(shí)施例的數(shù)據(jù)恢復(fù)方法簡(jiǎn)化后的流程圖。
[0029]圖2?圖4為圖1中依據(jù)明文文本而產(chǎn)生逆向文本的流程的實(shí)施例簡(jiǎn)化后的示意圖。
[0030]圖5為本申請(qǐng)實(shí)施例的數(shù)據(jù)庫系統(tǒng)簡(jiǎn)化后的功能方塊圖。
【具體實(shí)施方式】
[0031]本申請(qǐng)的主要思想在于,提供一種數(shù)據(jù)恢復(fù)的方法及設(shè)備以正確且有效率地進(jìn)行MySQL數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)工作。
[0032]為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,以下結(jié)合附圖及具體實(shí)施例,對(duì)本申請(qǐng)作進(jìn)一步地詳細(xì)說明。
[0033]許多系統(tǒng)應(yīng)用都會(huì)使用數(shù)據(jù)庫來存儲(chǔ)各種信息,系統(tǒng)中的應(yīng)用程序可以通過數(shù)據(jù)庫命令將信息寫入數(shù)據(jù)庫,也能夠通過數(shù)據(jù)庫命令由數(shù)據(jù)庫讀取所需的信息。這些系統(tǒng)應(yīng)用可以使用一個(gè)或多個(gè)計(jì)算機(jī)主機(jī)進(jìn)行運(yùn)作,計(jì)算機(jī)主機(jī)還可以利用多處理器、多機(jī)器、多執(zhí)行及/或并行執(zhí)行等技術(shù)來提升整個(gè)系統(tǒng)的可用性及處理能力。例如,可以將數(shù)據(jù)庫運(yùn)行于多個(gè)計(jì)算機(jī)主機(jī)上,并且將應(yīng)用程序也運(yùn)行于多個(gè)計(jì)算機(jī)主機(jī)上,以提升系統(tǒng)應(yīng)用的性能。計(jì)算機(jī)主機(jī)可以運(yùn)行Linux或Windows等操作系統(tǒng),而數(shù)據(jù)庫目前僅適用在MySQL的數(shù)據(jù)庫系統(tǒng)。
[0034]數(shù)據(jù)庫所存儲(chǔ)的數(shù)據(jù)量,會(huì)隨著系統(tǒng)運(yùn)行的時(shí)間而不斷地增加,許多數(shù)據(jù)庫每日新增的數(shù)據(jù)量動(dòng)輒以十億字節(jié)(gigabyte)或兆兆(terabyte)字節(jié)計(jì)算。當(dāng)數(shù)據(jù)庫異常巖機(jī)而重新開機(jī)時(shí),或者當(dāng)使用者需要將數(shù)據(jù)庫恢復(fù)到特定時(shí)間的存儲(chǔ)狀態(tài)時(shí),必須要依據(jù)一個(gè)確定的順序串列地進(jìn)行數(shù)據(jù)的恢復(fù),才能夠確保數(shù)據(jù)庫能夠正確地恢復(fù)至所需的存儲(chǔ)狀態(tài)。
[0035]現(xiàn)有的各種數(shù)據(jù)庫雖然都提供存儲(chǔ)數(shù)據(jù)的功能,然而每種數(shù)據(jù)庫的設(shè)計(jì)構(gòu)思、組成結(jié)構(gòu)及可使用的命令等,都有可能存在很大的差異。以下將針對(duì)MySQL數(shù)據(jù)庫或者依據(jù)MySQL數(shù)據(jù)庫為基礎(chǔ)所發(fā)展的數(shù)據(jù)庫,提出數(shù)據(jù)恢復(fù)的技術(shù)方案。
[0036]MySQL數(shù)據(jù)庫主要藉由二進(jìn)制日志(binary log)的結(jié)構(gòu),而記錄MySQL數(shù)據(jù)庫中事件或數(shù)據(jù)的變動(dòng),以能夠提供復(fù)制和備份等功能。二進(jìn)制日志的結(jié)構(gòu)可以包含有多個(gè)二進(jìn)制日志文件(binlog)及一個(gè)二進(jìn)制日志索引文件(binlog index),當(dāng)MySQL數(shù)據(jù)庫接收到刷新日志(flush log)等命令時(shí),MySQL數(shù)據(jù)庫就會(huì)產(chǎn)生新的二進(jìn)制日志文件,而二進(jìn)制日志索引文件則用來記錄所有的二進(jìn)制日志文件的索引,例如,該索引可以是二進(jìn)制日志文件的文件名稱。
[0037]在MySQL數(shù)據(jù)庫中,二進(jìn)制日志文件通常有三種存儲(chǔ)模式,分別是行(row)模式、陳述(statement)模式和混和(mix)模式。行模式的二進(jìn)制日志文件會(huì)記錄MySQL數(shù)據(jù)庫中每一行數(shù)據(jù)被修改的信息,陳述模式會(huì)記錄MySQL數(shù)據(jù)庫中每一條會(huì)修改數(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ù)庫中以行模式存儲(chǔ)的二進(jìn)制日志文件,而進(jìn)行MySQL數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)。
[0038]圖1為本申請(qǐng)的數(shù)據(jù)恢復(fù)方法的實(shí)施例簡(jiǎn)化后的流程圖。
[0039]在流程110中,數(shù)據(jù)庫接收到一個(gè)數(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ù)命令而解析對(duì)應(yīng)的二進(jìn)制日志文件,以將二進(jìn)制日志文件解析為對(duì)應(yīng)的明文文本。例如,可以采用MySQL數(shù)據(jù)庫自帶的數(shù)據(jù)庫命令mysqlbinlog,而將二進(jìn)制日志文件解析為對(duì)應(yīng)的明文文本。此外,在流程120中,僅需將與數(shù)據(jù)恢復(fù)命令相關(guān)的二進(jìn)制日志文件的部分內(nèi)容進(jìn)行解析,因此可以降低運(yùn)算量。
[0041]在流程130中,依據(jù)流程120的明文文本而產(chǎn)生逆向文本,逆向文本和明文文本的事務(wù)(transaction)的執(zhí)行次序相反,逆向文本的每個(gè)事務(wù)中的數(shù)據(jù)庫命令與明文文本中對(duì)應(yīng)事務(wù)的數(shù)據(jù)庫命令邏輯上相反并且執(zhí)行次序也是相反的。
[0042]在流程140中,依據(jù)現(xiàn)有的二進(jìn)制日志文件以及逆向文本,執(zhí)行逆向文本以將數(shù)據(jù)庫恢復(fù)至流程110中數(shù)據(jù)恢復(fù)命令所指定的數(shù)據(jù)狀態(tài)。
[0043]在流程120中,進(jìn)行二進(jìn)制日志文件解析為對(duì)應(yīng)的明文文本的運(yùn)作。然而,數(shù)據(jù)庫的數(shù)據(jù)存在有轉(zhuǎn)義字符,轉(zhuǎn)義字符是在字母前加"\"、"\X"、或"\X0"等符號(hào)來表示,因此轉(zhuǎn)義字符與原來字母所代表的意思已經(jīng)不相同了。二進(jìn)制日志文件包含有與數(shù)據(jù)庫的數(shù)據(jù)完全一致的記錄,而包含有轉(zhuǎn)義字符。因此,如果通過MySQL自帶的mysqlbinlog工具解析二進(jìn)制日志文件所得到的數(shù)據(jù)因?yàn)榘修D(zhuǎn)義字符,而無法得到可以直接執(zhí)行的數(shù)據(jù)庫命令。
[0044]在一個(gè)實(shí)施例中,可以通過⑶B等調(diào)試程序工具對(duì)MySQL自帶的mysqlbinlog工具進(jìn)行修改,或者使用其他自帶的腳本等工具進(jìn)行所需的解析運(yùn)作,將二進(jìn)制日志文件進(jìn)行解析,并且還原轉(zhuǎn)義字符,以獲得可以直接執(zhí)行的數(shù)據(jù)庫命令。
[0045]例如,在一個(gè)實(shí)施例中,要將一條命令insert into tx values (’a\bb’)進(jìn)行解析,通過MySQL自帶的mysqlbinlog工具所解析的文本會(huì)是"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)生逆向文本的一實(shí)施例簡(jiǎn)化后的示意圖,以下將以圖2?圖4進(jìn)一步說明流程130中逆向文本的產(chǎn)生方式。
[0047]在圖2中,明文文本210中包含有三個(gè)事務(wù)212、214和216,其Tl、T2和T3分別代表事務(wù)212、214和216的環(huán)境參數(shù)。而明文文本210的Sf S6為數(shù)據(jù)庫命令,例如,插入(insert)、刪除(delete)和更新(update)等。每個(gè)事務(wù)分別在自身的環(huán)境參數(shù)下執(zhí)行包含于BEGIN (開始)及END (結(jié)束)之間的數(shù)據(jù)庫命令。
[0048]在圖2中,可以將明文文本210經(jīng)由流程131的處理,而將分別在事務(wù)212、214和216處進(jìn)行數(shù)據(jù)庫命令的邏輯反置。插入的邏輯反置是刪除、刪除的邏輯反置是插入、以及更新的邏輯反置仍是更新。例如,插入2的數(shù)據(jù)庫命令的邏輯反置即為刪除2。
[0049]例如,在一個(gè)實(shí)施例中,要將命令insert into ccc values (2,〃\\〃)進(jìn)行流程131的邏輯反置運(yùn)作,由于數(shù)據(jù)庫命令插入的邏輯反置是刪除,因此經(jīng)過邏輯反置后的結(jié)果為delete from ccc where id=2and name=' \\'。
[0050]此外,數(shù)據(jù)庫中每個(gè)表的字段名會(huì)被替換成〃@1"等字符,因此,在流程131中還需要將@1替換成原來的字段名。例如,在一個(gè)實(shí)施例中,可以透過peri等語言通過正則表達(dá)式提取所需的字段代號(hào)、數(shù)據(jù)庫名和表名等信息,再通過GetTableField等函數(shù)查詢數(shù)據(jù)庫的INF0RMAT10N_SCHEMA表以獲得所需的字段信息,并且將字段信息存入另一個(gè)對(duì)照表,而利用對(duì)照表實(shí)現(xiàn)將"@1"等字符替換為字段名的運(yùn)作。
[0051]因此,可以將明文文本210經(jīng)由流程131的處理而獲得文本220,文本220中數(shù)據(jù)庫命令SI,飛6’分別代表其對(duì)應(yīng)于文本210中數(shù)據(jù)庫命令Sf S6的邏輯反置。
[0052]在圖3中,可以將文本220經(jīng)由流程133的處理,而將分別在事務(wù)222、224和226處進(jìn)行數(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處進(jìn)行事務(wù)次序的反置。例如,將文本320的事務(wù)次序322、324和326反置為326、324和322,而成為逆向文本420中的事務(wù)422、424和426。
[0054]在圖2?圖4的實(shí)施例中,流程131、133和135的順序也可以交換,也能依據(jù)明文文本產(chǎn)生對(duì)應(yīng)的逆向文本。例如,先執(zhí)行流程135的事務(wù)次序的反置,再執(zhí)行流程131的數(shù)據(jù)庫命令邏輯反置,然后再執(zhí)行流程133的數(shù)據(jù)庫命令次序反置,同樣能夠依據(jù)明文文本210而產(chǎn)生相同的逆向文本420。
[0055]由于二進(jìn)制日志文件的行模式可以記錄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ìn)行文本解析、逆向或數(shù)據(jù)恢復(fù)的運(yùn)作,可以使用MySQL數(shù)據(jù)庫自帶的工具或者使用其他自定的腳本等工具,例如,使用Perl語言等由正則表達(dá)式提取文本中所需的信息及進(jìn)行字段的替換等工作。
[0057]圖5為本申請(qǐng)的一個(gè)實(shí)施例的數(shù)據(jù)庫系統(tǒng)500簡(jiǎn)化后的功能方塊圖。數(shù)據(jù)庫系統(tǒng)500包含可以采用一個(gè)或多個(gè)計(jì)算機(jī)設(shè)備及軟件實(shí)施,并且計(jì)算機(jī)設(shè)備可以采移動(dòng)式或非移動(dòng)式的設(shè)備,例如,服務(wù)器、個(gè)人計(jì)算機(jī)、筆記本電腦或手機(jī)等設(shè)備。
[0058]數(shù)據(jù)庫系統(tǒng)500可以包含數(shù)據(jù)恢復(fù)命令接收模塊510、二進(jìn)制日志文本解析模塊520、逆向文本產(chǎn)生模塊530及數(shù)據(jù)恢復(fù)模塊540,而能夠進(jìn)行數(shù)據(jù)的恢復(fù)。
[0059]數(shù)據(jù)恢復(fù)命令接收模塊510可以用以執(zhí)行流程110的運(yùn)作,從而能夠接收數(shù)據(jù)恢復(fù)命令。
[0060]二進(jìn)制日志文本解析模塊520可用以執(zhí)行流程120的運(yùn)作,依據(jù)數(shù)據(jù)恢復(fù)命令而解析對(duì)應(yīng)的二進(jìn)制日志文件,以將二進(jìn)制日志文件解析為對(duì)應(yīng)的明文文本,并且還可以將轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)換。
[0061]逆向文本產(chǎn)生模塊530可用以執(zhí)行流程130的運(yùn)作,進(jìn)行邏輯反置、替換字段名、事務(wù)內(nèi)的數(shù)據(jù)庫命令次序反置及事務(wù)的次序反置等運(yùn)作,從而能夠依據(jù)上述的實(shí)施方式將明文文本而產(chǎn)生逆向文本。
[0062]數(shù)據(jù)恢復(fù)模塊540可用以執(zhí)行流程140的運(yùn)作,從而能夠依據(jù)現(xiàn)有的二進(jìn)制日志文件以及逆向文本,執(zhí)行逆向文本以將數(shù)據(jù)庫恢復(fù)至流程110中數(shù)據(jù)恢復(fù)命令所指定的數(shù)據(jù)狀態(tài)。
[0063]在上述的實(shí)施例中,雖然在流程140中會(huì)執(zhí)行逆向文本中次序反置的事務(wù),并且執(zhí)行事務(wù)中次序反置并且邏輯反置的數(shù)據(jù)庫命令,而將數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)至所需的狀態(tài)。然而,事務(wù)和數(shù)據(jù)庫命令在逆向文本中的記錄方式也可以設(shè)置為依據(jù)其他的方式記錄。但是,當(dāng)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)恢復(fù)時(shí),仍舊會(huì)以反置的次序執(zhí)行明文文本中的事務(wù),并且以反置的次序及反置的邏輯執(zhí)行事務(wù)中的數(shù)據(jù)庫命令
[0064]由于數(shù)據(jù)庫所存儲(chǔ)的數(shù)據(jù)量很大,通常動(dòng)輒以十億字節(jié)(gigabyte)或兆兆(terabyte)計(jì)算。若以目前的數(shù)據(jù)恢復(fù)方式,依據(jù)MySQL數(shù)據(jù)庫的mysqldump備份數(shù)據(jù)和二進(jìn)制日志文本進(jìn)行數(shù)據(jù)恢復(fù)工作,以數(shù)十億位元組至數(shù)百億位元組的mysqldump備份數(shù)據(jù),搭配二進(jìn)制日志文本進(jìn)行數(shù)據(jù)恢復(fù),即便只有少數(shù)的數(shù)據(jù)需要恢復(fù),數(shù)據(jù)庫仍然需要至少數(shù)小時(shí)至數(shù)天進(jìn)行數(shù)據(jù)恢復(fù)而無法正常運(yùn)作。即便是由其他的機(jī)器復(fù)制所需的數(shù)據(jù),或采用人工修復(fù)的方式,也無法有效的降低數(shù)據(jù)恢復(fù)的時(shí)間。
[0065]然而,依據(jù)上述的實(shí)施例產(chǎn)生逆向文本,再搭配二進(jìn)制日志文本進(jìn)行數(shù)據(jù)恢復(fù)的方式,可以使數(shù)據(jù)恢復(fù)的時(shí)間與需要恢復(fù)的數(shù)據(jù)量成正比,進(jìn)而大幅縮短數(shù)據(jù)恢復(fù)時(shí)間。若只有少數(shù)的數(shù)據(jù)需要恢復(fù),甚至可以達(dá)到分鐘級(jí)別的恢復(fù)時(shí)間,使數(shù)據(jù)庫能夠快速的再次正常運(yùn)作,從而達(dá)到高可用性的標(biāo)準(zhǔn)。
[0066]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0067]以上所述僅為本申請(qǐng)的實(shí)施例而已,并不用于限制本申請(qǐng),對(duì)于本領(lǐng)域的技術(shù)人員來說,本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐ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)代碼將二進(jìn)制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及第二事務(wù),該第一事務(wù)包含一個(gè)或多個(gè)第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個(gè)或多個(gè)第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行; 依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令的一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令的一個(gè)或多個(gè)第四數(shù)據(jù)庫命令;以及依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 將該第一事務(wù)的該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令進(jìn)行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行邏輯反置; 將該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令進(jìn)行次序反置; 將該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行次序反置;以及 將該第三事務(wù)及該四事務(wù)進(jìn)行次序反置以產(chǎn)生該逆向文本。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 依據(jù)相反于該第一次序的方式將該第三事務(wù)及該第四事務(wù)記錄于該逆向文本; 依據(jù)相反于該第二次序的方式將該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令記錄于該逆向文本;以及 依據(jù)相反于該第三次序的方式將該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令記錄于該逆向文本。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 替換該明文文本的一個(gè)或多個(gè)轉(zhuǎn)義字符,使該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令可以直接執(zhí)行。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令; 將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令;以及 提取一個(gè)或多個(gè)數(shù)據(jù)庫的字段代號(hào)、數(shù)據(jù)庫名和表名,以替換該一個(gè)或多個(gè)第三數(shù)據(jù)命令及該一個(gè)或多個(gè)第四數(shù)據(jù)命令的字段名。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實(shí)施,該二進(jìn)制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進(jìn)制日志文本。
7.一種數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,還包括: 數(shù)據(jù)恢復(fù)命令接收模塊,用以接收數(shù)據(jù)恢復(fù)命令,該數(shù)據(jù)恢復(fù)命令包含有欲恢復(fù)的數(shù)據(jù)狀態(tài)的狀態(tài)代碼;二進(jìn)制日志文本解析模塊,依據(jù)該狀態(tài)代碼將二進(jìn)制日志文本的至少一部分解析成明文文本,該明文文本包含有第一事務(wù)及第二事務(wù),該第一事務(wù)包含一個(gè)或多個(gè)第一數(shù)據(jù)庫命令,該第二事務(wù)包含一個(gè)或多個(gè)第二數(shù)據(jù)庫命令,并且該第一事務(wù)及該第二事務(wù)是依據(jù)第一次序執(zhí)行,該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令是依據(jù)第二次序執(zhí)行,該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令是依據(jù)第三次序執(zhí)行; 逆向文本產(chǎn)生模塊,依據(jù)該第一事務(wù)及該第二事務(wù)而分別產(chǎn)生逆向文本的第三事務(wù)及第四事務(wù),該第三事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令的一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,該第四事務(wù)包含邏輯上相反于該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令的一個(gè)或多個(gè)第四數(shù)據(jù)庫命令;以及 數(shù)據(jù)恢復(fù)模塊,依據(jù)相反于該第一次序的方式執(zhí)行該逆向文本的該第三事務(wù)及該第四事務(wù),依據(jù)相反于該第二次序的方式執(zhí)行該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令,并且依據(jù)相反于該第三次序的方式執(zhí)行該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令,以將該數(shù)據(jù)庫恢復(fù)至該狀態(tài)代碼所指示的該數(shù)據(jù)狀態(tài)。
8.如權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該逆向文本產(chǎn)生模塊將該第一事務(wù)的該一個(gè)或多個(gè)第一數(shù)據(jù)庫命令及該第二事務(wù)的該一個(gè)或多個(gè)第二數(shù)據(jù)庫命令進(jìn)行邏輯反置以分別產(chǎn)生該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行邏輯反置;該逆向文本產(chǎn)生模塊將該第三事務(wù)的該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令進(jìn)行次序反置;該逆向文本產(chǎn)生模塊將該第四事務(wù)的該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令進(jìn)行次序反置;以及該逆向文本產(chǎn)生模塊還將該第三事務(wù)及該四事務(wù)進(jìn)行次序反置以產(chǎn)生該逆向文本。
9.如權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該第三事務(wù)及該第四事務(wù)以相反于該第一次序的方式記錄 于該逆向文本;該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令以相反于該第二次序的方式記錄于該逆向文本;以及該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令以相反于該第三次序的方式記錄于該逆向文本。
10.根據(jù)權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該二進(jìn)制日志文本解析模塊替換該明文文本的一個(gè)或多個(gè)轉(zhuǎn)義字符,使該一個(gè)或多個(gè)第三數(shù)據(jù)庫命令及該一個(gè)或多個(gè)第四數(shù)據(jù)庫命令可以直接執(zhí)行。
11.根據(jù)權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該逆向文本產(chǎn)生模塊將插入的數(shù)據(jù)庫命令置換為刪除的數(shù)據(jù)庫命令,將刪除的數(shù)據(jù)庫命令置換為插入的數(shù)據(jù)庫命令,以及提取一個(gè)或多個(gè)數(shù)據(jù)庫的字段代號(hào)、數(shù)據(jù)庫名和表名,以替換該一個(gè)或多個(gè)第三數(shù)據(jù)命令及該一個(gè)或多個(gè)第四數(shù)據(jù)命令的字段名。
12.如權(quán)利要求7所述的數(shù)據(jù)恢復(fù)設(shè)備,其特征在于,該數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫實(shí)施,該二進(jìn)制日志文本為該MySQL數(shù)據(jù)庫中以行模式紀(jì)錄的二進(jìn)制日志文本。
【文檔編號(hào)】G06F17/30GK103838780SQ201210490745
【公開日】2014年6月4日 申請(qǐng)日期:2012年11月27日 優(yōu)先權(quán)日:2012年11月27日
【發(fā)明者】陳錦賦 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
吉安县| 墨玉县| 合水县| 大洼县| 罗城| 牙克石市| 郴州市| 白城市| 益阳市| 育儿| 威信县| 丘北县| 那坡县| 和林格尔县| 磐安县| 城步| 桑植县| 辽阳市| 西和县| 健康| 万全县| 章丘市| 施秉县| 古蔺县| 轮台县| 三穗县| 东山县| 瑞昌市| 平遥县| 印江| 海口市| 常熟市| 尼玛县| 东乌珠穆沁旗| 偏关县| 宣城市| 安丘市| 依兰县| 温宿县| 卓资县| 济南市|