數(shù)據(jù)備份與恢復方法及裝置制造方法【專利摘要】本發(fā)明提供一種數(shù)據(jù)備份方法,包括:獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);根據(jù)該總行數(shù)與預置的第一命令行選項的值,計算該未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);當該未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)該總行數(shù)與該目標行數(shù)將該未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。本發(fā)明還提供一種數(shù)據(jù)恢復方法、數(shù)據(jù)備份裝置以及數(shù)據(jù)恢復裝置,上述數(shù)據(jù)備份與恢復方法及裝置可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率?!緦@f明】數(shù)據(jù)備份與恢復方法及裝置【
技術領域:
】[0001]本發(fā)明涉及計算機【
技術領域:
】,尤其涉及一種數(shù)據(jù)備份與恢復方法及裝置?!?br>背景技術:
】[0002]隨著計算機的普及應用,人們越來越習慣于通過計算機來獲取信息、處理信息,同時將自己最重要的信息以數(shù)據(jù)文件的形式保存在計算機中。為了對這些數(shù)據(jù)文件進行有效管理,數(shù)據(jù)庫技術應運而生。數(shù)據(jù)備份與恢復是數(shù)據(jù)庫技術的重要組成部分。其中,數(shù)據(jù)備份,是指將全部或部分數(shù)據(jù)集合從運行數(shù)據(jù)庫實例的硬盤或陣列復制到其它的存儲介質(zhì)的過程,數(shù)據(jù)集合包括但不限于表內(nèi)容、表結(jié)構(gòu)、表函數(shù)、視圖、觸發(fā)器、存儲過程等。數(shù)據(jù)恢復,是指使用數(shù)據(jù)備份將數(shù)據(jù)導入數(shù)據(jù)庫從而實現(xiàn)還原數(shù)據(jù)內(nèi)容、狀態(tài)、結(jié)構(gòu)的一種形式。[0003]現(xiàn)有的數(shù)據(jù)庫技術,由于都是通過串行執(zhí)行備份文件中的SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)語句來實現(xiàn)數(shù)據(jù)恢復,因此在大數(shù)據(jù)場景下恢復速度非常緩慢,無法勝任快速恢復數(shù)據(jù)服務的需求?!?br/>發(fā)明內(nèi)容】[0004]有鑒于此,本發(fā)明提供一種數(shù)據(jù)備份與恢復方法及裝置,可實現(xiàn)基于大表拆分的數(shù)據(jù)備份以及數(shù)據(jù)并行恢復,從而可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0005]本發(fā)明實施例提供的一種數(shù)據(jù)備份方法,包括:獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);根據(jù)所述總行數(shù)與預置的第一命令行選項的值,計算所述未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);當所述未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)所述總行數(shù)與所述目標行數(shù)將所述未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。[0006]本發(fā)明實施例提供的一種數(shù)據(jù)恢復方法,包括:獲取備份元數(shù)據(jù)文件,所述備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件;生成所述備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將所述數(shù)據(jù)恢復任務加入任務隊列;通過多個處理進程并行地獲取所述任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復數(shù)據(jù)庫中對應的數(shù)據(jù)。[0007]本發(fā)明實施例提供的一種數(shù)據(jù)備份裝置,包括:第一獲取模塊,用于獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);計算模塊,用于根據(jù)所述第一獲取模塊獲取的所述總行數(shù)與預置的第一命令行選項的值,計算所述未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);備份模塊,用于當所述第一獲取模塊獲取的所述未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)所述第一獲取模塊獲取的所述總行數(shù)與所述計算模塊計算的所述目標行數(shù)將所述未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。[0008]本發(fā)明實施例提供的一種數(shù)據(jù)恢復裝置,其特征在于,包括:獲取模塊,用于獲取備份元數(shù)據(jù)文件,所述備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件;生成模塊,用于生成所述獲取模塊獲取的所述備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將所述數(shù)據(jù)恢復任務加入任務隊列;恢復模塊,用于通過多個處理進程并行地獲取所述任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復所述數(shù)據(jù)庫中對應的數(shù)據(jù)。[0009]本發(fā)明實施例提供的上述數(shù)據(jù)備份與恢復方法及裝置,通過在數(shù)據(jù)備份時,將數(shù)據(jù)庫中大小超過預置的第二命令行選項的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,在數(shù)據(jù)恢復時,利用多個處理進程并行地獲取任務列表中的任務及該任務對應的目標分片備份文件,并進行處理,打破了現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0010]為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。【專利附圖】【附圖說明】[0011]圖1為本發(fā)明實施例提供的數(shù)據(jù)備份與恢復方法及裝置的應用環(huán)境圖;[0012]圖2示出了一種服務器的結(jié)構(gòu)框圖;[0013]圖3為本發(fā)明第一實施例提供的數(shù)據(jù)備份方法的流程圖;[0014]圖4為本發(fā)明第二實施例提供的數(shù)據(jù)備份方法的流程圖;[0015]圖5為本發(fā)明第二實施例提供的數(shù)據(jù)備份方法中部分步驟的流程圖;[0016]圖6為本發(fā)明第二實施例提供的數(shù)據(jù)備份方法中部分步驟的流程圖;[0017]圖7為本發(fā)明第二實施例提供的數(shù)據(jù)備份方法中部分步驟的流程圖;[0018]圖8為本發(fā)明第三實施例提供的數(shù)據(jù)恢復方法的流程圖;[0019]圖9為本發(fā)明第四實施例提供的數(shù)據(jù)恢復方法的流程圖;[0020]圖10為本發(fā)明第四實施例提供的數(shù)據(jù)恢復方法中部分步驟的流程圖;[0021]圖11為本發(fā)明第五實施例提供的數(shù)據(jù)備份裝置的結(jié)構(gòu)示意圖;[0022]圖12為圖11的裝置的存儲環(huán)境示意圖;[0023]圖13為本發(fā)明第六實施例提供的數(shù)據(jù)備份裝置的結(jié)構(gòu)示意圖;[0024]圖14為本發(fā)明第六實施例提供的數(shù)據(jù)備份裝置中部分模塊的結(jié)構(gòu)示意圖;[0025]圖15為本發(fā)明第六實施例提供的數(shù)據(jù)備份裝置中部分模塊的結(jié)構(gòu)示意圖;[0026]圖16為本發(fā)明第七實施例提供的數(shù)據(jù)備份裝置的結(jié)構(gòu)示意圖;[0027]圖17為圖16的裝置的存儲環(huán)境示意圖;[0028]圖18為本發(fā)明第八實施例提供的數(shù)據(jù)備份裝置的結(jié)構(gòu)示意圖;[0029]圖19為本發(fā)明第八實施例提供的數(shù)據(jù)備份裝置中部分模塊的結(jié)構(gòu)示意圖。【具體實施方式】[0030]為更進一步闡述本發(fā)明為實現(xiàn)預定發(fā)明目的所采取的技術手段及功效,以下結(jié)合附圖及較佳實施例,對依據(jù)本發(fā)明的【具體實施方式】、結(jié)構(gòu)、特征及其功效,詳細說明如后。[0031]圖1為本發(fā)明實施例提供的數(shù)據(jù)備份與恢復方法及裝置的應用環(huán)境圖。本發(fā)明實施例提供的數(shù)據(jù)備份與恢復方法及裝置可應用于圖1所示的環(huán)境中,實現(xiàn)基于數(shù)據(jù)庫的數(shù)據(jù)備份與恢復。如圖1所示,服務器100與存儲服務器200位于有線或無線網(wǎng)絡中,通過該有線或無線網(wǎng)絡,服務器100與存儲服務器200進行數(shù)據(jù)交互。[0032]具體地,一方面,在對數(shù)據(jù)庫中的數(shù)據(jù)進行備份時,服務器100獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);根據(jù)該總行數(shù)與預置的第一命令行選項的值,計算該未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);當該未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)該總行數(shù)與該目標行數(shù)將該未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出至存儲服務器200。[0033]另一方面,在對該數(shù)據(jù)庫中的數(shù)據(jù)進行恢復時,服務器100從存儲服務器200獲取備份元數(shù)據(jù)文件,該備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件,生成該備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將該數(shù)據(jù)恢復任務加入任務隊列;通過多個處理進程并行地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0034]可以理解地,本實施例提供的數(shù)據(jù)備份與恢復方法也可適用于終端設備。終端設備可以包括:預置有數(shù)據(jù)庫的平板電腦、膝上型便攜計算機、臺式計算機、一體機等等。[0035]圖2示出了一種服務器的結(jié)構(gòu)框圖,如圖2所示,服務器100包括:存儲器101、處理器102以及網(wǎng)絡模塊103。[0036]可以理解,圖2所示的結(jié)構(gòu)僅為示意,服務器100還可包括比圖2中所示更多或者更少的組件,或者具有與圖2所示不同的配置。圖2中所示的各組件可以采用硬件、軟件或其組合實現(xiàn)。另外,本發(fā)明實施例中的服務器還可以包括多個具體不同功能的服務器。[0037]存儲器101可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的數(shù)據(jù)備份與恢復方法及裝置對應的程序指令/模塊,處理器102通過運行存儲在存儲器101內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據(jù)處理,即實現(xiàn)本發(fā)明實施例中的數(shù)據(jù)備份與恢復方法。存儲器101可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器101可進一步包括相對于處理器102遠程設置的存儲器,這些遠程存儲器可以通過網(wǎng)絡連接至服務器100。進一步地,上述軟件程序以及模塊還可包括:操作系統(tǒng)121以及服務模塊122。其中操作系統(tǒng)121,例如可為LINUX、UNIX、WINDOWS,其可包括各種用于管理系統(tǒng)任務(例如內(nèi)存管理、存儲設備控制、電源管理等)的軟件組件和/或驅(qū)動,并可與各種硬件或軟件組件相互通訊,從而提供其他軟件組件的運行環(huán)境。服務模塊122運行在操作系統(tǒng)121的基礎上,并通過操作系統(tǒng)121的網(wǎng)絡服務監(jiān)聽來自網(wǎng)絡的請求,根據(jù)請求完成相應的數(shù)據(jù)處理,并返回處理結(jié)果給客戶端。也就是說,服務模塊122用于向客戶端提供網(wǎng)絡服務。[0038]網(wǎng)絡模塊103用于接收以及發(fā)送網(wǎng)絡信號。上述網(wǎng)絡信號可包括無線信號或者有線信號。在一個實例中,上述網(wǎng)絡信號為有線網(wǎng)絡信號。此時,網(wǎng)絡模塊103可包括處理器、隨機存儲器、轉(zhuǎn)換器、晶體振蕩器等元件。[0039]第一實施例[0040]請參閱圖3,圖3為本發(fā)明第一實施例提供的數(shù)據(jù)備份方法的流程圖。本實施例可應用于圖1所示的應用環(huán)境中,通過圖1所示的服務器100實現(xiàn)基于數(shù)據(jù)庫的數(shù)據(jù)備份。如圖3所示,本實施例提供的數(shù)據(jù)備份方法包括:[0041]步驟S11,獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);[0042]表(或稱數(shù)據(jù)表)是數(shù)據(jù)庫最重要的組成部分之一。數(shù)據(jù)庫只是一個框架,數(shù)據(jù)表才是其實質(zhì)內(nèi)容。根據(jù)信息的分類情況,一個數(shù)據(jù)庫中可能包含若干個數(shù)據(jù)表。在數(shù)據(jù)表中,每一列是一個字段,每一行是一條記錄,每一條記錄包含這行中的所有信息。[0043]于本實施例中,服務器100中預置有數(shù)據(jù)庫(Database),根據(jù)預置的備份策略,月艮務器100定期對數(shù)據(jù)庫中的數(shù)據(jù)進行備份?;蛘叻掌?00也可以根據(jù)用戶的指令執(zhí)行數(shù)據(jù)備份操作。當針對該數(shù)據(jù)庫的數(shù)據(jù)備份操作被觸發(fā)時,服務器100遍歷該數(shù)據(jù)庫中的所有的表,獲取未備份的表的內(nèi)容數(shù)據(jù)的大小及該未備份的表的總行數(shù)。[0044]步驟S12,根據(jù)該總行數(shù)與預置的第一命令行選項的值,計算該未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);[0045]于本實施例中,預置的第一命令行選項split_count,可以用于定義數(shù)據(jù)庫中的“大表”被拆分后,拆分出的該“大表”的分片的數(shù)量??梢岳斫獾?,假定split_COunt的選項值為C,需要拆分的“大表”一共有L行數(shù)據(jù),則拆分后的該“大表”的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句(以下統(tǒng)稱為SQL語句)的目標行數(shù)為M=L/C。若C不能整除L,則最后一個分片包含的給定的SQL語句的目標行數(shù)為L%C(%表示取模運算),第I至C-1個分片包含的給定的SQL語句的目標行數(shù)為M。[0046]優(yōu)選地,該給定的SQL語句為insertintovalue(即把指定的值插入行)語句。[0047]步驟S13,當該未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)該總行數(shù)與該目標行數(shù)將該未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。[0048]于本實施例中,預置的第二命令行選項largetable_size,可以用于定義需要拆分的“大表”的大小。服務器100遍歷數(shù)據(jù)庫中的表,當表的內(nèi)容數(shù)據(jù)的大小大于或等于此選項設定的閾值時,可確定該表屬于需要拆分的“大表”。[0049]具體地,當獲取的數(shù)據(jù)庫中的未備份的表的大小大于或等于largetable_size的值時,可確定該未備份的表屬于需要拆分的“大表”。服務器100根據(jù)該未備份的表的總行數(shù)與目標行數(shù),創(chuàng)建該未備份的表的每個分片各自對應的分片備份文件;獲取該未備份的表中未處理的行對應的字段及該未處理的行對應的字段的值,將該未處理的行對應的字段及該未處理的行對應的字段的值,拼接成SQL語句;當該未處理的行中字段及其值已拼接為SQL語句的行(也就是已處理的行)的數(shù)量大于或等于該目標行數(shù)時,獲取當前所有該已處理的行對應的目標分片備份文件;獲取該當前所有該已處理的行的SQL語句各自對應的字符串,將該各自對應的字符串壓縮寫入該目標分片備份文件,并輸出,然后將統(tǒng)計的該已處理的行的數(shù)量歸零;獲取已處理但對應的SQL語句未寫入對應的目標分片備份文件的目標行及其對應的目標分片備份文件,將該目標行對應的SQL語句對應的字符串壓縮寫入該對應的目標分片備份文件,并輸出。[0050]像這樣,將大小超過largetable_size的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,使得不同數(shù)據(jù)庫表的各個備份文件之間的大小差異不會太大,這樣當數(shù)據(jù)恢復時,可以保證每個備份處理進程的工作量大致相當,當多個備份處理進程并發(fā)工作時,可保證資源被均衡分配到每個備份處理進程,從而提高處理數(shù)據(jù)的穩(wěn)定性及效率。[0051]進一步地,當獲取的數(shù)據(jù)庫中的未備份的表的大小小于largetable_size的值時,可確定該未備份的表不屬于需要拆分的“大表”,則服務器100直接生成該未備份的表對應的第一備份文件,并輸出。具體地,服務器100創(chuàng)建該未備份的表對應的第一備份文件;獲取該未備份的表中的各個字段及該各個字段各自對應的值,將該各個字段及該各個字段各自對應的值拼接成SQL語句;輸出拼接好的該結(jié)構(gòu)化查詢語言語句對應的字符串;將該字符串壓縮寫入該第一備份文件,并輸出該第一備份文件。[0052]進一步的,備份對象可以包括但不限于該數(shù)據(jù)庫中的:表、視圖、觸發(fā)器、存儲過程、函數(shù)、索引。服務器100獲取該數(shù)據(jù)庫中表以外的其他備份對象,根據(jù)該其他備份對象的類型,生成分別與不同類型的其他備份對象一一對應的第二備份文件。[0053]像這樣,通過將數(shù)據(jù)庫中的不同備份對象進行單獨備份,可以在數(shù)據(jù)恢復時有針對性地選擇某一類型的數(shù)據(jù)進行恢復,從而可提高數(shù)據(jù)恢復的靈活性。[0054]進一步地,服務器100獲取輸出的第一備份文件,該目標分片備份文件以及該第二備份文件作為目標備份文件,并根據(jù)該目標備份文件生成備份元數(shù)據(jù)文件,然后將該備份元數(shù)據(jù)文件壓縮后拆分為多個數(shù)據(jù)包,并發(fā)送給存儲服務器200;接收存儲服務器200返回的存儲記錄,根據(jù)該存儲記錄刪除本地存儲的該備份元數(shù)據(jù)文件及該多個數(shù)據(jù)包,以減少本地存儲資源的占用。[0055]本發(fā)明實施例提供的數(shù)據(jù)備份方法,通過在數(shù)據(jù)備份時,將數(shù)據(jù)庫中大小超過預置的第二命令行選項的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,使得在恢復數(shù)據(jù)的過程中得以打破現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,實現(xiàn)通過多個處理進程并發(fā)地對目標分片備份文件進行批量處理,從而可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0056]第二實施例[0057]請參閱圖4,圖4為本發(fā)明第二實施例提供的數(shù)據(jù)備份方法的流程圖。本實施例可應用于圖1所示的應用環(huán)境中,通過圖1所示的服務器100實現(xiàn)基于數(shù)據(jù)庫的數(shù)據(jù)備份。如圖4所示,本實施例提供的數(shù)據(jù)備份方法包括:[0058]步驟S201,讀取預置的命令行選項;[0059]表(或稱數(shù)據(jù)表)是數(shù)據(jù)庫最重要的組成部分之一。數(shù)據(jù)庫只是一個框架,數(shù)據(jù)表才是其實質(zhì)內(nèi)容。根據(jù)信息的分類情況,一個數(shù)據(jù)庫中可能包含若干個數(shù)據(jù)表。在數(shù)據(jù)表中,每一列是一個字段,每一行是一條記錄,每一條記錄包含這行中的所有信息。[0060]于本實施例中,服務器100中預置有數(shù)據(jù)庫(Database),根據(jù)預置的備份策略,月艮務器100定期對數(shù)據(jù)庫中的數(shù)據(jù)進行備份?;蛘叻掌?00也可以根據(jù)用戶的指令執(zhí)行數(shù)據(jù)備份操作。當針對該數(shù)據(jù)庫的數(shù)據(jù)備份操作被觸發(fā)時,服務器100讀取預置的命令行選項。[0061]可以理解地,該數(shù)據(jù)庫中的備份對象包括但不限于:表、視圖、觸發(fā)器、存儲過程、函數(shù)、索引。[0062]具體地,預置的命令行選項可以包括:第一命令行選項split_count,第二命令行選項largetable_size以及第三命令行選項flushwaittimeout。[0063]第一命令行選項split_COunt,可以用于定義該數(shù)據(jù)庫中的“大表”被拆分后,拆分出的該“大表”的分片的數(shù)量??梢岳斫獾兀俣╯plit_COunt的選項值為C,需要拆分的“大表”一共有L行數(shù)據(jù),則拆分后的該“大表”的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句(以下統(tǒng)稱為SQL語句)的目標行數(shù)為M=L/C。若C不能整除L,則最后一個分片包含的給定的SQL語句的目標行數(shù)為L%C(%表示取模運算),第I至C-1個分片包含的給定的SQL語句的目標行數(shù)為M。[0064]第二命令行選項largetablejize,可以用于定義需要拆分的“大表”的大小。月艮務器100遍歷數(shù)據(jù)庫中的表,當表的內(nèi)容數(shù)據(jù)的大小大于或等于此選項設定的閾值時,可確定該表屬于需要拆分的“大表”。[0065]第三命令行選項flush_wait_timeout,可以用于判斷服務器100執(zhí)行凍結(jié)操作的時間是否超時。可以理解地,若flush_wait_timeout定義的時間之內(nèi),服務器100未完成執(zhí)行該關閉表的操作,可確定操作超時,為了不阻塞數(shù)據(jù)庫的其他作業(yè),服務器100將自動錯誤退出,以確保在線數(shù)據(jù)庫服務的安全和穩(wěn)定。具體地,凍結(jié)操作可以包括:關閉表操作與全局讀鎖定操作。關閉表操作,用于關閉數(shù)據(jù)庫中所有已打開的表,可以通過flushtable(關閉數(shù)據(jù)庫中所有已打開的表)語句實現(xiàn)。全局讀鎖定操作用于將數(shù)據(jù)庫設置為全局讀鎖定,以凍結(jié)該數(shù)據(jù)庫,可以通過flushtablewithreadlock(關閉數(shù)據(jù)庫中所有已打開的表并將該數(shù)據(jù)庫設置為全局讀鎖定)語句實現(xiàn)。[0066]優(yōu)選地,可自定義配置largetable_size=10G,split_count=10,flushwaittimeout=30s。[0067]步驟S202,判斷該命令行選項是否通過校驗;[0068]于本實施例中,當?shù)谝幻钚羞x項split_count與第二命令行選項largetable_size同時存在時,也就是服務器100成功讀取largetable_size與split_count時,可確定預置的命令行選項通過校驗。[0069]若未通過該校驗,則執(zhí)行步驟S203:結(jié)束數(shù)據(jù)備份;[0070]若通過該校驗,則執(zhí)行步驟S204:關閉數(shù)據(jù)庫中所有已打開的表,凍結(jié)該數(shù)據(jù)庫;[0071]具體地,如圖5所示,本步驟包括:[0072]步驟S2041,執(zhí)行關閉表操作(flushtable),該關閉表操作用于關閉該數(shù)據(jù)庫中所有已打開的表;[0073]步驟S2042,根據(jù)該命令行選項中第三命令行選項的值,判斷該關閉表操作(flushtable)是否執(zhí)行超時;[0074]具體地,服務器100獲取執(zhí)行flushtable操作的初始時間,并以該初始時間為起點開始計時,經(jīng)過flush_wait_timeout定義的時間之后若服務器100仍未完成該flushtable操作,可確定本次執(zhí)行flushtable操作超時。[0075]若該關閉表(flushtable)操作執(zhí)行超時,則執(zhí)行步驟S2043:判斷已執(zhí)行的該關閉表(flushtable)操作的次數(shù)是否大于或等于預置的第一閾值;[0076]若小于該第一閾值,則在等待第一預置時長后,重試執(zhí)行步驟S2041;[0077]具體地,服務器100獲取本次數(shù)據(jù)備份中已執(zhí)行的flushtable操作的次數(shù),若該次數(shù)小于預置的第一閾值,則在等待第一預置時長后,服務器100重試執(zhí)行flushtable操作。[0078]若大于或等于該第一閾值,則執(zhí)行步驟S2044:獲取系統(tǒng)當前正在執(zhí)行的針對該數(shù)據(jù)庫進行的第一任務信息;[0079]可以理解地,當系統(tǒng)中存在針對該數(shù)據(jù)庫正在進行的任務時,為了執(zhí)行該任務,數(shù)據(jù)庫中的表是無法被關閉的,因此通過獲取在執(zhí)行flushtable操作超時的時間點系統(tǒng)當前正在執(zhí)行的針對該數(shù)據(jù)庫進行的任務信息,可以了解flushtable操作執(zhí)行超時的原因,以便調(diào)整數(shù)據(jù)備份策略。[0080]步驟S2045,根據(jù)該第一任務信息生成超時瞬間的第一任務列表,并輸出;[0081]具體地,服務器100獲取每一次判定執(zhí)行flushtable操作超時后獲取的超時瞬間系統(tǒng)中正在執(zhí)行的針對數(shù)據(jù)庫進行的任務信息作為第一任務信息,根據(jù)該第一任務信息生成超時瞬間的第一任務列表(processlist),并打印到日志文件輸出,以便進行業(yè)務分析,排查糾錯。[0082]若該關閉表(flushtable)操作未執(zhí)行超時,則執(zhí)行步驟S2046:執(zhí)行全局讀鎖定(flushtablewithreadlock)操作,該全局讀鎖定操作用于將該數(shù)據(jù)庫設置為全局讀鎖定,以凍結(jié)該數(shù)據(jù)庫;[0083]具體地,若服務器100執(zhí)行flushtable操作未超時,也就是服務器100在flush_wait_timeout定義的時間之內(nèi)完成了flushtable操作,則服務器100繼續(xù)執(zhí)行flushtablewithreadlock操作,以凍結(jié)整個數(shù)據(jù)庫中的數(shù)據(jù),使得用戶只可讀取該數(shù)據(jù)庫中的數(shù)據(jù),而不可向該數(shù)據(jù)庫寫入數(shù)據(jù)。[0084]步驟S2047,根據(jù)該命令行選項中的第三命令行選項的值,判斷該全局讀鎖定(flushtablewithreadlock)操作是否執(zhí)行超時;[0085]具體地,獲取服務器100執(zhí)行flushtablewithreadlock操作的初始時間,并以該初始時間為起點開始計時,經(jīng)過flush_wait_timeout定義的時間之后若服務器100仍未完成該flushtablewithreadlock操作,可確定服務器100執(zhí)行flushtablewithreadlock操作超時。[0086]若該全局讀鎖定(flushtablewithreadlock)操作執(zhí)行超時,則執(zhí)行步驟S2048:判斷已執(zhí)行的該全局讀鎖定(flushtablewithreadlock)操作的次數(shù)是否大于或等于預置的第二閾值;[0087]若小于該第二閾值,則在等待第二預置時長后,執(zhí)行步驟S2046;[0088]具體地,若服務器100已執(zhí)行的flushtablewithreadlock操作的次數(shù)小于預置的第二閾值,則在等待第二預置時長后,服務器100重試執(zhí)行flushtablewithreadlock操作??梢岳斫獾?,根據(jù)自定義,該第一閾值與該第二閾值可以一致,也可以不一致;該第一預置時長與該第二預置時長可以一致,也可以不一致。[0089]若大于或等于該第二閾值,則執(zhí)行步驟S2049:獲取系統(tǒng)當前正在執(zhí)行的針對該數(shù)據(jù)庫進行的第二任務信息,根據(jù)該第二任務信息生成超時瞬間的第二任務列表,并輸出。[0090]可以理解地,當系統(tǒng)中存在針對該數(shù)據(jù)庫正在進行的任務時,為了執(zhí)行該任務,無法將該數(shù)據(jù)庫設置為全局讀鎖定,因此通過獲取在執(zhí)行flushtablewithreadlock操作超時的時間點系統(tǒng)當前正在執(zhí)行的針對該數(shù)據(jù)庫進行的任務信息,可以了解flushtablewithreadlock操作執(zhí)行超時的原因,以便調(diào)整數(shù)據(jù)備份策略。服務器100獲取每一次判定執(zhí)行flushtablewithreadlock操作超時后獲取的超時瞬間系統(tǒng)中正在執(zhí)行的針對數(shù)據(jù)庫進行的任務信息作為第二任務信息,根據(jù)該第二任務信息生成超時瞬間的第二任務列表(processlist),并打印到日志文件輸出,以便進行業(yè)務分析,排查糾錯。[0091]步驟S205,獲取該數(shù)據(jù)庫在當前時間點的數(shù)據(jù)快照作為該數(shù)據(jù)庫的鏡像文件,解凍該數(shù)據(jù)庫,將該鏡像文件作為該數(shù)據(jù)庫;[0092]具體地,若服務器100執(zhí)行flushtablewithreadlock操作未超時,也就是若月艮務器100在flush_wait_timeout定義的時間之內(nèi)完成了flushtablewithreadlock操作,則通過MVCC(Multi_Vers1nConcurrencyControl多版本并發(fā)控制)獲取該數(shù)據(jù)庫在當前時間點的數(shù)據(jù)快照,并將該數(shù)據(jù)快照作為該數(shù)據(jù)庫的瞬間鏡像文件輸出,然后解凍該數(shù)據(jù)庫。[0093]具體地,服務器100可通過執(zhí)行unlocktable,解除全局讀鎖定,也就是允許用戶對數(shù)據(jù)庫中的數(shù)據(jù)進行讀寫操作,以解凍該數(shù)據(jù)庫。[0094]需要注意的是,于本實施例中后續(xù)備份程序?qū)⒁栽撍查g鏡像文件為基準,將該瞬間鏡像文件作為該數(shù)據(jù)庫進行備份。于其他實施例中,也可以不獲取該瞬間鏡像文件,而是在凍結(jié)該數(shù)據(jù)庫后,基于該被凍結(jié)的數(shù)據(jù)庫進行數(shù)據(jù)備份,并當備份完成時,解凍該數(shù)據(jù)庫。[0095]由于是數(shù)據(jù)快照,因此該瞬間鏡像文件的內(nèi)容與全局讀鎖定期間該數(shù)據(jù)庫的內(nèi)容完全一致,備份該瞬間鏡像文件也就等于備份該數(shù)據(jù)庫,因此可以保證備份出的文件與該數(shù)據(jù)庫的一致性。[0096]同時,由于在獲取瞬間鏡像文件后,解凍該數(shù)據(jù)庫,因此可在數(shù)據(jù)備份的同時,不影響該數(shù)據(jù)庫的正常使用。[0097]步驟S206,遍歷該數(shù)據(jù)庫中的表,判斷是否存在未備份的表;[0098]若存在,則執(zhí)行步驟S207:獲取該未備份的表的大小及其總行數(shù);[0099]步驟S208:根據(jù)該總行數(shù)與該命令行選項中的第一命令行選項的值,計算該未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句(SQL)的目標行數(shù);[0100]具體地,假定split_c0unt的選項值為C,該未備份的表的總行數(shù)為L行,則目標行數(shù)M=L/C。若C不能整除L,則最后一個分片中包含的給定的SQL語句的目標行數(shù)為L%C(%表示取模運算),第I至C-1個分片中包含的給定的SQL語句的目標行數(shù)為M。[0101]優(yōu)選地,該給定的SQL語句可以為insertintovalue(即把指定的值插入行)語句。[0102]步驟S209,根據(jù)該命令行選項中的第二命令行選項的值,判斷該未備份的表是否需要拆分;[0103]具體地,服務器100判斷該未備份的表的大小是否大于或等于largetable_size的值,若該未備份的表的大小大于或等于largetable_size的值,可確定該未備份的表屬于“大表”,需要拆分;若該未備份的表的大小小于largetable_size定義的值,可確定該未備份的表不屬于“大表”,不需要拆分。[0104]若不需要拆分,則執(zhí)行步驟S210:生成該未備份的表對應的第一備份文件,并輸出;然后,執(zhí)行步驟S206;[0105]具體地,如圖6所示,本步驟包括:[0106]步驟S2101,創(chuàng)建該未備份的表對應的第一備份文件;[0107]具體地,該第一備份文件可以為文本文件,其中存儲有多條包含未備份的表中的數(shù)據(jù)信息的insertintovalues語句??梢岳斫獾?未備份的表中包含多少行數(shù)據(jù),該備份文件中就有多少條(或行)對應的insertintovalues語句。像這樣通過以文本文件作為數(shù)據(jù)備份的載體,可以減小獲得的備份文件的體積,從而提高備份文件在各個裝置之間的傳送速度。[0108]步驟S2102,獲取該未備份的表中的各個字段及該各個字段各自對應的值,將該各個字段及該各個字段各自對應的值拼接成該結(jié)構(gòu)化查詢語言語句;[0109]于本實施例中,服務器100遍歷該未備份的表中的所有數(shù)據(jù),獲取該未備份的表中的各個字段(列)及該各個字段各自對應的值,根據(jù)insertintovalues語句的語法,將獲取的表中的各個字段及該各個字段各自對應的值拼接成insertintovalues語句。[0110]步驟S2103,輸出拼接好的該結(jié)構(gòu)化查詢語言語句對應的字符串;[0111]于本實施例中,服務器100輸出拼接成的insertintovalues語句對應的字符串(也就是insert字符串)。[0112]步驟S2104,將該字符串壓縮寫入該第一備份文件,并輸出該第一備份文件。[0113]若需要拆分,則執(zhí)行步驟S211:根據(jù)該總行數(shù)與該目標行數(shù)將該未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出;然后,執(zhí)行步驟S206。[0114]如圖7所示,本步驟具體包括:[0115]步驟S2111,創(chuàng)建該每個分片各自對應的分片備份文件;[0116]于本實施方式中,分片備份文件可以為文本文件,其中存儲有多條包含對應的分片中的數(shù)據(jù)信息的insertintovalues語句??梢岳斫獾?對應的分片中包含多少行數(shù)據(jù),該分片備份文件中就有多少條(或行)對應的insertintovalues語句。[0117]步驟S2112,判斷該未備份的表中是否存在未處理的行;[0118]若存在該未處理的行,則執(zhí)行步驟S2113:獲取該未處理的行對應的字段及該未處理的行對應的字段的值,將該未處理的行對應的字段及該未處理的行對應的字段的值,拼接成該結(jié)構(gòu)化查詢語言語句;[0119]于本實施例中,服務器100對未處理的行進行處理,獲取未處理的行對應的字段(列)及該字段對應的值,根據(jù)insertintovalues語句的語法,將該行對應的字段及其值拼接成insertintovalues語句。[0120]步驟S2114,統(tǒng)計已處理的行的數(shù)量;[0121]步驟S2115,判斷該數(shù)量是否大于或等于該目標行數(shù);[0122]若小于,則執(zhí)行步驟S2112;[0123]若大于或等于,則執(zhí)行步驟S2116:獲取當前所有該已處理的行對應的目標分片備份文件;[0124]可以理解地,服務器100在創(chuàng)建數(shù)據(jù)庫中未備份的表的每個分片各自對應的分片備份文件時,記錄生成的每個分片備份文件與該未備份的表中的行的對應關系。根據(jù)該對應關系,服務器100從該分片備份文件中確定出當前所有已處理的行對應的目標分片備份文件。[0125]步驟S2117,獲取該當前所有該已處理的行的結(jié)構(gòu)化查詢語言語句各自對應的字符串,將該各自對應的字符串壓縮寫入該目標分片備份文件,并輸出;[0126]于本實施例中,服務器100獲取當前所有該已處理的行的insertintovalues語句各自對應的字符串,將該各自對應的字符串壓縮寫入該目標分片備份文件,并輸出。[0127]像這樣,將內(nèi)容數(shù)據(jù)的大小超過largetable_size的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,使得不同數(shù)據(jù)庫表的各個備份文件之間的大小差異不會太大,這樣當數(shù)據(jù)恢復時,可以保證每個備份處理進程的工作量大致相當,當多個備份處理進程并發(fā)工作時,可保證資源被均衡分配到每個備份處理進程,從而提高處理數(shù)據(jù)的穩(wěn)定性及效率。[0128]步驟S2118,將統(tǒng)計的該已處理的行的數(shù)量歸零。[0129]若不存在該未處理的行,則執(zhí)行步驟S2119:獲取已處理但對應的結(jié)構(gòu)化查詢語言語句未寫入對應的目標分片備份文件的目標行及其對應的目標分片備份文件,將該目標行對應的結(jié)構(gòu)化查詢語言語句對應的字符串壓縮寫入該對應的目標分片備份文件,并輸出。[0130]可以理解地,由于待拆分的表的行數(shù)L并不一定是split_COunt定義的值C的整數(shù),因此當L/C不能整除時,待拆分的表中必然會有一部分的行對應的SQL語句因為不滿足步驟S2115的條件而不被壓縮寫入對應的目標分片備份文件。通過本步驟可將上述SQL語句寫入對應的目標分片備份文件,從而避免備份遺漏。[0131]若不存在未備份的表,則執(zhí)行步驟S212,獲取該數(shù)據(jù)庫中表以外的其他備份對象,根據(jù)該其他備份對象的類型,生成分別與不同類型的其他備份對象一一對應的第二備份文件。[0132]于本實施例中,表以外的其他備份對象可以包括:視圖、觸發(fā)器、存儲過程、函數(shù)、索引等等。服務器100根據(jù)該其他備份對象的類型,生成分別與不同類型的其他備份對象一一對應的第二備份文件,例如:與視圖對應的備份文件,與觸發(fā)器對應的備份文件等等??梢岳斫獾?,由于表以外的其他備份對象一般體積較小,因此無需拆分,直接生成對應的備份文件即可。[0133]可以理解地,本步驟可以獨立執(zhí)行,或先于步驟S206執(zhí)行(也即備份表的步驟)。[0134]像這樣,通過將數(shù)據(jù)庫中的不同備份對象進行單獨備份,可以在數(shù)據(jù)恢復時有針對性地選擇某一類型的數(shù)據(jù)進行恢復,從而可提高數(shù)據(jù)恢復的靈活性。[0135]步驟S213,獲取目標備份文件,根據(jù)該目標備份文件生成備份元數(shù)據(jù)文件;[0136]于本實施例中,目標備份文件可以包括:該第一備份文件,該目標分片備份文件以及該第二備份文件??梢岳斫獾?,目標備份文件也可以包括:該第一備份文件,該目標分片備份文件以及該第二備份文件中的任一種或幾種。服務器100獲取在前述步驟中輸出的該第一備份文件,該目標分片備份文件以及該第二備份文件作為目標備份文件,并根據(jù)該目標備份文件生成備份元數(shù)據(jù)文件。其中,該第一備份文件,該目標分片備份文件以及該第二備份文件是邏輯備份介質(zhì)。邏輯備份是指使用軟件技術從數(shù)據(jù)庫中導出數(shù)據(jù)并寫入一個輸出文件,該文件的格式一般與原數(shù)據(jù)庫的文件格式不同,只是原數(shù)據(jù)庫中數(shù)據(jù)內(nèi)容的一個映像。也就是說該第一備份文件、該目標分片備份文件以及該第二備份文件實質(zhì)上可以屬于邏輯備份產(chǎn)生的文件。[0137]可以理解地,該備份元數(shù)據(jù)文件中還可以包含元數(shù)據(jù)文件,該元數(shù)據(jù)文件用于記錄上述各種備份文件的組織結(jié)構(gòu),便于在恢復數(shù)據(jù)時使用。其中,該組織結(jié)構(gòu)為一種多對一的映射關系,例如:目標分片備份文件與行的對應關系,數(shù)據(jù)庫與表的對應關系。其中,數(shù)據(jù)庫與表的對應關系于本實施方式中可通過目錄樹的組織結(jié)構(gòu)形式體現(xiàn)。[0138]步驟S214,將該備份元數(shù)據(jù)文件壓縮后拆分為多個數(shù)據(jù)包,并發(fā)送給存儲服務器;[0139]可以理解地,存儲服務器200可以為獨立的服務器或服務器集群。當為服務器集群時,服務器集群的入口服務器接收服務器100發(fā)送的備份元數(shù)據(jù)文件,并根據(jù)預置的備份策略,從服務器集群中確定目標服務器,將該備份元數(shù)據(jù)文件發(fā)送到該目標服務器中存儲,并獲取存儲記錄。[0140]步驟S215,接收存儲服務器返回的存儲記錄,根據(jù)該存儲記錄刪除本地存儲的該備份元數(shù)據(jù)文件及該多個數(shù)據(jù)包,以減少本地存儲資源的占用。[0141]本發(fā)明實施例提供的數(shù)據(jù)備份方法,通過在數(shù)據(jù)備份時,將數(shù)據(jù)庫中大小超過預置的第二命令行選項的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,以及將數(shù)據(jù)庫中的表、視圖、觸發(fā)器等各種備份對象獨立于數(shù)據(jù)庫分別獨自備份,使得在恢復數(shù)據(jù)的過程中得以打破現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,實現(xiàn)通過多個處理進程并發(fā)地對多個備份文件進行批量處理,從而可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0142]第三實施例[0143]請參閱圖8,圖8為本發(fā)明第三實施例提供的數(shù)據(jù)恢復方法的流程圖。本實施例可應用于圖1所示的應用環(huán)境中,通過圖1所示的服務器100實現(xiàn)基于數(shù)據(jù)庫的數(shù)據(jù)恢復。如圖8所示,本實施例提供的數(shù)據(jù)恢復方法包括:[0144]步驟S31,獲取備份元數(shù)據(jù)文件;[0145]于本實施例中,備份元數(shù)據(jù)文件可以存儲于服務器100的存儲器中,也可以壓縮包的形式存儲于存儲服務器200中。服務器100從存儲服務器200獲取備份元數(shù)據(jù)文件的壓縮包,解壓該壓縮包獲取其中包含的多個備份元數(shù)據(jù)文件。[0146]具體地,該備份元數(shù)據(jù)文件可以包括作為邏輯備份介質(zhì)的:數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件。[0147]進一步地,該備份元數(shù)據(jù)文件還可以包括:該表對應的第一備份文件,以及該數(shù)據(jù)庫中表以外的其他備份對象對應的第二備份文件。[0148]優(yōu)選地,該備份元數(shù)據(jù)文件可以為文本文件。[0149]步驟S32,生成該備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將該數(shù)據(jù)恢復任務加入任務隊列;[0150]進一步地,服務器100在將該數(shù)據(jù)恢復任務加入任務隊列之后,還可以亂序該任務隊列,也即打亂該任務隊列中的數(shù)據(jù)恢復任務的排列順序。通過打亂任務隊列中的任務的排列順序,可以減少并發(fā)的處理進程之間的競爭,減少內(nèi)耗,從而降低因并發(fā)插入B+樹局部節(jié)點所帶來的性能損耗,提高數(shù)據(jù)處理的效率。[0151]步驟S33,通過多個處理進程并行地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0152]于本實施例中,服務器100可根據(jù)中央處理器的處理能力確定多個處理進程,然后通過該多個處理進程并發(fā)地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理。具體地,服務器100通過該多個處理進程并行地從該任務列表中申請該目標數(shù)據(jù)恢復任務;逐一讀取該目標數(shù)據(jù)恢復任務對應的備份元數(shù)據(jù)文件中給定的結(jié)構(gòu)化查詢語言語句;通過解析器解析該結(jié)構(gòu)化查詢語言語句的語法;通過優(yōu)化器對該結(jié)構(gòu)化查詢語言語句的語法進行優(yōu)化;執(zhí)行該結(jié)構(gòu)化查詢語言語句,恢復該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0153]優(yōu)選地,該給定的結(jié)構(gòu)化查詢語言語句可以為insertintovalues(即把指定的值插入行)語句。[0154]本發(fā)明實施例提供的數(shù)據(jù)恢復方法,通過在數(shù)據(jù)恢復時,利用多個處理進程并行地獲取任務列表中的任務,并進行處理,打破了現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0155]第四實施例[0156]請參閱圖9,圖9為本發(fā)明第四實施例提供的數(shù)據(jù)恢復方法的流程圖。本實施例可應用于圖1所示的應用環(huán)境中,通過圖1所示的服務器100實現(xiàn)基于數(shù)據(jù)庫的數(shù)據(jù)恢復。如圖9所示,本實施例提供的數(shù)據(jù)恢復方法包括:[0157]步驟S401,檢查外鍵約束功能是否關閉,若未關閉,則關閉該外鍵約束功能;[0158]外鍵是用來實現(xiàn)參照完整性的,外鍵約束功能是現(xiàn)有的數(shù)據(jù)庫提供的一種通過根據(jù)數(shù)據(jù)內(nèi)容在導入時的先后順序來保證導入的數(shù)據(jù)的正確性與完整性的功能。于本實施例中,通過關閉該外鍵約束功能,使得數(shù)據(jù)的正確性不再依賴于數(shù)據(jù)內(nèi)容在導入時的先后順序,以便為后續(xù)的并發(fā)恢復數(shù)據(jù)做準備,保證數(shù)據(jù)的恢復可以不按照固定順序進行,使得備份的多個表數(shù)據(jù)可以被同時恢復,從而提高數(shù)據(jù)恢復的靈活性。[0159]步驟S402,獲取備份元數(shù)據(jù)文件;[0160]于本實施例中,備份元數(shù)據(jù)文件可以壓縮包的形式存儲于存儲服務器200中。服務器100從存儲服務器200獲取備份元數(shù)據(jù)文件的壓縮包,解壓該壓縮包獲取其中包含的多個備份元數(shù)據(jù)文件。優(yōu)選地,該備份元數(shù)據(jù)文件為文本文件。[0161]具體地,該備份元數(shù)據(jù)文件可以包括作為邏輯備份介質(zhì)的:該數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件、該表對應的第一備份文件以及該數(shù)據(jù)庫中表以外的其他備份對象對應的第二備份文件,可以理解地,該備份元數(shù)據(jù)文件中還可包含上述各種備份文件的組織結(jié)構(gòu)信息的元數(shù)據(jù)文件。[0162]步驟S403,根據(jù)中央處理器的處理能力確定多個處理進程;[0163]具體地,服務器100可以根據(jù)中央處理器的核數(shù)以及每個核數(shù)的最大處理線程,確定用于數(shù)據(jù)恢復的處理進程的數(shù)量,例如:假定CPU的核數(shù)為4,每個核所能處理的最大線程為6,則可確定并發(fā)20?24個處理進程。[0164]步驟S404,生成該備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將該數(shù)據(jù)恢復任務加入任務隊列;[0165]步驟S405,亂序該任務隊列;[0166]具體地,亂序該任務隊列,也即打亂該任務隊列中的數(shù)據(jù)恢復任務的排列順序。通過打亂任務隊列中的任務的排列順序,可以減少并發(fā)的處理進程之間的競爭,減少內(nèi)耗,從而降低因并發(fā)插入B+樹局部節(jié)點所帶來的性能損耗,提高數(shù)據(jù)處理的效率。[0167]步驟S406,通過該多個處理進程并行地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0168]例如,假設當前有30個數(shù)據(jù)恢復任務,24個進程,則這24個進程首先并行地從任務列表中獲取24個進程,并同時進行處理,當有進程完成處理后,空閑的進程繼續(xù)從該任務列表中獲取剩余的數(shù)據(jù)恢復任務并進行處理。[0169]如圖10所示,具體地,本步驟可以包括:[0170]步驟S4061,通過該多個處理進程并行地從該任務列表中申請該目標數(shù)據(jù)恢復任務;[0171]步驟S4062,逐一讀取該目標數(shù)據(jù)恢復任務對應的備份元數(shù)據(jù)文件中給定的結(jié)構(gòu)化查詢語言語句;[0172]于本實施例中,服務器100通過該多個處理進程分別逐一讀取各自申請的該目標數(shù)據(jù)恢復任務對應的備份元數(shù)據(jù)文件中的給定的SQL語句,獲取對應的字符串。優(yōu)選地,該SQL語句為insertintovalues(即把指定的值插入行)語句。[0173]步驟S4063,通過解析器解析該結(jié)構(gòu)化查詢語言語句的語法;[0174]具體地,處理進程可以通過預置的解析器檢查該SQL語句的語法是否符合SQL規(guī)范,檢查該SQL語句的中的訪問對象是否存在及該用戶是否具備相應的權限,并對該SQL語句進行解析,例如:利用內(nèi)部算法對SQL語句進行解析,生成解析樹及執(zhí)行計劃。[0175]步驟S4064,通過優(yōu)化器對該結(jié)構(gòu)化查詢語言語句的語法進行優(yōu)化;[0176]步驟S4065,執(zhí)行該結(jié)構(gòu)化查詢語言語句,恢復該數(shù)據(jù)庫中對應的數(shù)據(jù);[0177]具體地,恢復數(shù)據(jù)庫中對應的數(shù)據(jù)可以包括:增加、刪除、修改該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0178]步驟S407,獲取該備份元數(shù)據(jù)文件對應的二進制日志,根據(jù)該二進制日志,同步該數(shù)據(jù)庫與該源數(shù)據(jù)庫。[0179]該二進制日志中記錄有生成該備份元數(shù)據(jù)文件的時間點至當前時間點之間,用戶對用于生成該備份元數(shù)據(jù)文件的源數(shù)據(jù)庫執(zhí)行更改的所有操作。根據(jù)該二進制日志的記錄,將生成該備份元數(shù)據(jù)文件的時間點至當前時間點之間,用戶對該源數(shù)據(jù)庫執(zhí)行更改的所有操作導致的該源數(shù)據(jù)庫中的數(shù)據(jù)變化,同步至該數(shù)據(jù)庫,使得該數(shù)據(jù)庫與該源數(shù)據(jù)庫中的數(shù)據(jù)保持一致。[0180]以下為進一步說明上述實施例,舉例來說,假設服務器100中配置有游戲數(shù)據(jù)庫A,游戲數(shù)據(jù)庫A中包括:游戲任務表、游戲角色表以及視圖、觸發(fā)器等其他類型的數(shù)據(jù)。[0181]在備份階段,假定根據(jù)預置的備份規(guī)則,服務器100于凌晨I點對游戲數(shù)據(jù)庫A執(zhí)行備份操作,讀取預置的命令行選項split_count,largetable_size以flushwaittimeout,當成功讀取largetable_size與split_count時,通過執(zhí)行flushtable以及flushtablewithreadlock操作凍結(jié)游戲數(shù)據(jù)庫A,當游戲數(shù)據(jù)庫A被成功凍結(jié)后,獲取游戲數(shù)據(jù)庫A在當前時間點的數(shù)據(jù)快照作為游戲數(shù)據(jù)庫A的鏡像文件A’,然后解凍該數(shù)據(jù)庫,并以鏡像文件A’為基準對游戲數(shù)據(jù)庫A中的數(shù)據(jù)進行備份;遍歷鏡像文件A’,獲取其中的游戲任務表的大小及其總行數(shù),根據(jù)split_Count的值,計算該游戲任務表被拆分后,每一分片中包含的SQL語句的目標行數(shù),并根據(jù)Iargetable^ize判斷該游戲任務表是否需要拆分,假定該游戲任務表的大小大于largetable^ize定義的值需要拆分,則根據(jù)該游戲任務表的總行數(shù)以及該目標行數(shù),將該游戲任務表劃分為多個分片,然后生成每個分片的分片備份文件,并作為目標分片備份文件輸出;之后,繼續(xù)遍歷鏡像文件A’,獲取其中的游戲角色表的大小及其總行數(shù),假定該游戲角色表不需要拆分,則生成該游戲角色表對應的第一備份文件,并輸出;接著,備份視圖、觸發(fā)器等其他數(shù)據(jù)對象,獲取備份出的備份文件作為第二備份文件輸出;最后,根據(jù)輸出的第一備份文件,目標分片備份文件以及第二備份文件生成備份元數(shù)據(jù)文件,并將其壓縮拆分后發(fā)送到存儲服務器200保存。[0182]在數(shù)據(jù)恢復階段,假定服務器100在上午10點執(zhí)行對游戲數(shù)據(jù)庫A的恢復操作,將游戲數(shù)據(jù)庫A中的數(shù)據(jù)恢復至數(shù)據(jù)庫B。服務器100從存儲服務器200獲取備份元數(shù)據(jù)文件,同時關閉外鍵約束功能,以保證后續(xù)并發(fā)恢復數(shù)據(jù)的程序能順利進行;然后,根據(jù)該備份元數(shù)據(jù)文件生成對應的數(shù)據(jù)恢復任務,將該數(shù)據(jù)恢復任務加入任務隊列,并打亂該任務隊列的順序;之后,通過多個處理進程并行地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以將游戲數(shù)據(jù)庫A中的數(shù)據(jù)恢復至數(shù)據(jù)庫B??梢岳斫獾?,由于該備份元數(shù)據(jù)文件備份的是凌晨I點游戲數(shù)據(jù)庫A中的數(shù)據(jù),在凌晨I點至上午10點之間,游戲數(shù)據(jù)庫A的數(shù)據(jù)會因為用戶的操作而發(fā)生變化,因此,進一步地服務器100從存儲服務器200獲取該備份元數(shù)據(jù)文件對應的二進制日志,也就是游戲數(shù)據(jù)庫A的二進制日志,根據(jù)該二進制日志中的記錄,將凌晨I點至上午10點之間因用戶對游戲數(shù)據(jù)庫A執(zhí)行更改操作而導致的游戲數(shù)據(jù)庫A的所有數(shù)據(jù)變化同步至數(shù)據(jù)庫B,從而使得數(shù)據(jù)庫B與游戲數(shù)據(jù)庫A保持一致,實現(xiàn)基于時間點的一致性備份。[0183]本發(fā)明實施例提供的數(shù)據(jù)恢復方法,通過在數(shù)據(jù)恢復時,利用多個處理進程并行地獲取任務列表中的任務,并進行處理,打破了現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0184]第五實施例[0185]圖11為本發(fā)明第五實施例提供的數(shù)據(jù)備份裝置的結(jié)構(gòu)示意圖。本實施例提供的數(shù)據(jù)備份裝置可運行于圖1所示的服務器100中,用于實現(xiàn)上述實施例中的數(shù)據(jù)備份方法。如圖11所示,數(shù)據(jù)備份裝置50包括:第一獲取模塊51、計算模塊52以及備份模塊53。[0186]第一獲取模塊51,用于獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);[0187]計算模塊52,用于根據(jù)第一獲取模塊51獲取的該總行數(shù)與預置的第一命令行選項的值,計算該未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);[0188]備份模塊53,用于當?shù)谝猾@取模塊51獲取的該未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)第一獲取模塊51獲取的該總行數(shù)與計算模塊52計算的該目標行數(shù)將該未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。[0189]以上各模塊可以是由軟件代碼實現(xiàn),此時,上述的各模塊可存儲于存儲器101內(nèi),如圖12所示。以上各模塊同樣可以由硬件例如集成電路芯片實現(xiàn)。[0190]本實施例對數(shù)據(jù)備份裝置50的各功能模塊實現(xiàn)各自功能的具體過程,請參見上述圖1至圖10所示實施例中描述的具體內(nèi)容,此處不再贅述。[0191]本發(fā)明實施例提供的數(shù)據(jù)備份裝置,通過在數(shù)據(jù)備份時,將數(shù)據(jù)庫中大小超過預置的第二命令行選項的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,使得在恢復數(shù)據(jù)的過程中得以打破現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,實現(xiàn)通過多個處理進程并發(fā)地對目標分片備份文件進行批量處理,從而可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0192]第六實施例[0193]圖13為本發(fā)明第六實施例提供的數(shù)據(jù)備份裝置的結(jié)構(gòu)示意圖。本實施例提供的數(shù)據(jù)備份裝置可運行于圖1所示的服務器100中,用于實現(xiàn)上述實施例中的數(shù)據(jù)備份方法。如圖13所示,數(shù)據(jù)備份裝置60包括:第一獲取模塊51、計算模塊52、備份模塊53、讀取模塊61、凍結(jié)模塊62、第二獲取模塊63、解凍模塊64、第三獲取模塊65、生成模塊66、發(fā)送模塊67以及刪除模塊68。[0194]第一獲取模塊51,用于獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);[0195]計算模塊52,用于根據(jù)第一獲取模塊51獲取的該總行數(shù)與預置的第一命令行選項的值,計算該未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);[0196]備份模塊53,用于當?shù)谝猾@取模塊51獲取的該未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)第一獲取模塊51獲取的該總行數(shù)與計算模塊52計算的該目標行數(shù)將該未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出;[0197]讀取模塊61,用于讀取預置的命令行選項,該命令行選項包括:該第一命令行選項、該第二命令行選項;[0198]凍結(jié)模塊62,用于當讀取模塊61讀取的該第一命令行選項與該第二命令行選項通過校驗時,關閉該數(shù)據(jù)庫中所有已打開的表,凍結(jié)該數(shù)據(jù)庫;[0199]第二獲取模塊63,用于獲取該數(shù)據(jù)庫在當前時間點的數(shù)據(jù)快照作為該數(shù)據(jù)庫的鏡像文件;[0200]解凍模塊64,用于解凍該數(shù)據(jù)庫,將該鏡像文件作為該數(shù)據(jù)庫,執(zhí)行該獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù)的步驟。[0201]第三獲取模塊65,用于獲取目標備份文件,該目標備份文件包括:該第一備份文件、該目標分片備份文件以及該第二備份文件;[0202]生成模塊66,用于根據(jù)第三獲取模塊65獲取的該目標備份文件生成備份元數(shù)據(jù)文件;[0203]發(fā)送模塊67,用于將生成模塊66生成的該備份元數(shù)據(jù)文件壓縮后拆分為多個數(shù)據(jù)包,并發(fā)送給存儲服務器,指示該存儲服務器將該多個數(shù)據(jù)包進行存儲;[0204]刪除模塊68,用于接收該存儲服務器返回的存儲記錄,刪除本地存儲的該備份元數(shù)據(jù)文件及該多個數(shù)據(jù)包。[0205]優(yōu)選地,如圖14所示,備份模塊53包括:[0206]第一創(chuàng)建單元531,用于創(chuàng)建該每個分片各自對應的分片備份文件;[0207]第一拼接單兀532,用于獲取該未備份的表中未處理的行對應的字段及該未處理的行對應的字段的值,將該未處理的行對應的字段及該未處理的行對應的字段的值,拼接成該結(jié)構(gòu)化查詢語言語句;[0208]獲取單元533,用于當已處理的行的數(shù)量大于或等于該目標行數(shù)時,獲取當前所有該已處理的行對應的目標分片備份文件;[0209]第一備份單元534,用于獲取該當前所有該已處理的行的結(jié)構(gòu)化查詢語言語句各自對應的字符串,將該各自對應的字符串壓縮寫入該目標分片備份文件,并輸出。[0210]優(yōu)選地,獲取單元533,還用于獲取已處理但對應的結(jié)構(gòu)化查詢語言語句未寫入對應的目標分片備份文件的目標行及該對應的目標分片備份文件;[0211]第一備份單元534,還用于將該目標行對應的結(jié)構(gòu)化查詢語言語句對應的字符串壓縮寫入該對應的目標分片備份文件,并輸出。[0212]優(yōu)選地,備份模塊53,還用于當該未備份的表的大小小于該第二命令行選項的值時,生成該未備份的表對應的第一備份文件,并輸出。[0213]優(yōu)選地,如圖14所示,備份模塊53還包括:[0214]第二創(chuàng)建單元535,用于創(chuàng)建該未備份的表對應的第一備份文件;[0215]第二拼接單元536,用于獲取該未備份的表中的各個字段及該各個字段各自對應的值,將該各個字段及該各個字段各自對應的值拼接成該結(jié)構(gòu)化查詢語言語句;[0216]第二備份單元537,用于輸出拼接好的該結(jié)構(gòu)化查詢語言語句對應的字符串,并將該字符串壓縮寫入該第一備份文件。[0217]優(yōu)選地,該命令行選項還包括:第三命令行選項,如圖15所示,凍結(jié)模塊62包括:[0218]關閉單元621,用于執(zhí)行關閉表操作,該關閉表操作用于關閉該數(shù)據(jù)庫中所有已打開的表;[0219]判斷單元622,用于根據(jù)該第三命令行選項的值,判斷該關閉表操作是否執(zhí)行超時;[0220]判斷單元622,還用于若該關閉表操作執(zhí)行超時,則判斷已執(zhí)行的該關閉表操作的次數(shù)是否大于或等于預置的第一閾值;[0221]重試單元623,用于若該已執(zhí)行的該關閉表操作的次數(shù)小于該第一閾值,則在等待第一預置時長后,重試該執(zhí)行關閉表操作的步驟;[0222]獲取單元624,用于若該已執(zhí)行的該關閉表操作的次數(shù)大于或等于該第一閾值時,則獲取系統(tǒng)當前正在執(zhí)行的針對該數(shù)據(jù)庫進行的第一任務信息;[0223]輸出單兀625,用于根據(jù)該第一任務信息生成超時瞬間的第一任務列表,并輸出;[0224]凍結(jié)單元626,用于若該關閉表操作未執(zhí)行超時,則執(zhí)行全局讀鎖定操作,該全局讀鎖定操作用于將該數(shù)據(jù)庫設置為全局讀鎖定,以凍結(jié)該數(shù)據(jù)庫;[0225]判斷單元622,還用于根據(jù)該第三命令行選項的值,判斷該全局讀鎖定操作是否執(zhí)行超時;[0226]判斷單元622,還用于若該全局讀鎖定操作執(zhí)行超時,則判斷已執(zhí)行的該全局讀鎖定操作的次數(shù)是否大于或等于預置的第二閾值;[0227]重試單元623,還用于若該已執(zhí)行的該全局讀鎖定操作的次數(shù)小于該第二閾值,則在等待第二預置時長后,重試該執(zhí)行全局讀鎖定的步驟;[0228]獲取單元624,還用于若該已執(zhí)行的該全局讀鎖定操作的次數(shù)大于或等于該第二閾值時,則獲取系統(tǒng)當前正在執(zhí)行的針對該數(shù)據(jù)庫進行的第二任務信息;[0229]輸出單元625,還用于根據(jù)該第二任務信息生成超時瞬間的第二任務列表,并輸出。[0230]優(yōu)選地,第一獲取模塊51,還用于獲取該數(shù)據(jù)庫中表以外的其他備份對象;[0231]備份模塊53,還用于根據(jù)該其他備份對象的類型,生成分別與不同類型的其他備份對象--對應的第二備份文件。[0232]本實施例對數(shù)據(jù)備份裝置60的各功能模塊實現(xiàn)各自功能的具體過程,請參見上述圖1至圖10所示實施例中描述的具體內(nèi)容,此處不再贅述。[0233]本發(fā)明實施例提供的數(shù)據(jù)備份裝置,通過在數(shù)據(jù)備份時,將數(shù)據(jù)庫中大小超過預置的第二命令行選項的值的表拆分為若干個分片,并根據(jù)該若干個分片生成對應的目標分片備份文件,以及將數(shù)據(jù)庫中的表、視圖、觸發(fā)器等各種備份對象獨立于數(shù)據(jù)庫分別獨自備份,使得在恢復數(shù)據(jù)的過程中得以打破現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,實現(xiàn)通過多個處理進程并發(fā)地對多個備份文件進行批量處理,從而可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0234]第七實施例[0235]圖16為本發(fā)明第七實施例提供的數(shù)據(jù)恢復裝置的結(jié)構(gòu)示意圖。本實施例提供的數(shù)據(jù)恢復裝置可以運行于圖1所示的服務器100中,用于實現(xiàn)上述實施例中的數(shù)據(jù)恢復方法。如圖16所示,數(shù)據(jù)恢復裝置70包括:獲取模塊71、生成模塊72以及恢復模塊73。[0236]獲取模塊71,用于獲取備份元數(shù)據(jù)文件,該備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件;[0237]生成模塊72,用于生成獲取模塊71獲取的該備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將該數(shù)據(jù)恢復任務加入任務隊列;[0238]恢復模塊73,用于通過多個處理進程并行地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0239]以上各模塊可以是由軟件代碼實現(xiàn),此時,上述的各模塊可存儲于存儲器101內(nèi),如圖17所示。以上各模塊同樣可以由硬件例如集成電路芯片實現(xiàn)。[0240]本實施例對數(shù)據(jù)恢復裝置70的各功能模塊實現(xiàn)各自功能的具體過程,請參見上述圖1至圖10所示實施例中描述的具體內(nèi)容,此處不再贅述。[0241]本發(fā)明實施例提供的數(shù)據(jù)恢復裝置,通過在數(shù)據(jù)恢復時,利用多個處理進程并行地獲取任務列表中的任務,并進行處理,打破了現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0242]第八實施例[0243]圖18為本發(fā)明第八實施例提供的數(shù)據(jù)恢復裝置的結(jié)構(gòu)示意圖。本實施例提供的數(shù)據(jù)恢復裝置可以運行于圖1所示的服務器100中,用于實現(xiàn)上述實施例中的數(shù)據(jù)恢復方法。如圖18所示,數(shù)據(jù)恢復裝置80包括:獲取模塊71、生成模塊72、恢復模塊73、關閉模塊81以及同步模塊82。[0244]獲取模塊71,用于獲取備份元數(shù)據(jù)文件,該備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件;[0245]生成模塊72,用于生成獲取模塊71獲取的該備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將該數(shù)據(jù)恢復任務加入任務隊列;[0246]恢復模塊73,用于通過多個處理進程并行地獲取該任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復該數(shù)據(jù)庫中對應的數(shù)據(jù);[0247]關閉模塊81,用于檢查外鍵約束功能是否關閉,若未關閉,則關閉該外鍵約束功能,使得恢復的數(shù)據(jù)的正確性不依賴于數(shù)據(jù)內(nèi)容在導入時的先后順序;[0248]同步模塊82,用于根據(jù)該二進制日志,同步該數(shù)據(jù)庫與該源數(shù)據(jù)庫。[0249]優(yōu)選地,該備份元數(shù)據(jù)文件從存儲服務器獲取,該備份元數(shù)據(jù)文件中包括:該表對應的第一備份文件、以及該數(shù)據(jù)庫中表以外的其他備份對象對應的第二備份文件,如圖19所示,恢復模塊73包括:[0250]進程確定單元731,用于根據(jù)中央處理器的處理能力確定該多個處理進程;[0251]亂序單元732,用于亂序該任務隊列;[0252]申請單元733,用于通過該多個處理進程并行地從該任務列表中申請該目標數(shù)據(jù)恢復任務;[0253]讀取單元734,用于逐一讀取該目標數(shù)據(jù)恢復任務對應的備份元數(shù)據(jù)文件中給定的結(jié)構(gòu)化查詢語言語句;[0254]解析單元735,用于通過解析器解析該結(jié)構(gòu)化查詢語言語句的語法;[0255]優(yōu)化單元736,用于通過優(yōu)化器對該結(jié)構(gòu)化查詢語言語句的語法進行優(yōu)化;[0256]恢復單元737,用于執(zhí)行該結(jié)構(gòu)化查詢語言語句,恢復該數(shù)據(jù)庫中對應的數(shù)據(jù)。[0257]優(yōu)選地,獲取模塊71,還用于獲取該備份元數(shù)據(jù)文件對應的二進制日志,該二進制日志中記錄有生成該備份元數(shù)據(jù)文件的時間點至當前時間點之間,用戶對用于生成該備份元數(shù)據(jù)文件的源數(shù)據(jù)庫執(zhí)行更改的所有操作。[0258]本實施例對數(shù)據(jù)恢復裝置80的各功能模塊實現(xiàn)各自功能的具體過程,請參見上述圖1至圖10所示實施例中描述的具體內(nèi)容,此處不再贅述。[0259]本發(fā)明實施例提供的數(shù)據(jù)恢復裝置,通過在數(shù)據(jù)恢復時,利用多個處理進程并行地獲取任務列表中的任務,并進行處理,打破了現(xiàn)有技術中串行恢復數(shù)據(jù)的桎梏,可加快恢復數(shù)據(jù)的速度,提高處理數(shù)據(jù)的效率。[0260]需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。[0261]需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括要素的過程、方法、物品或者裝置中還存在另外的相同要素。[0262]本領域普通技術人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。[0263]以上,僅是本發(fā)明的較佳實施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術人員,在不脫離本發(fā)明技術方案范圍內(nèi),當可利用上述揭示的技術內(nèi)容做出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發(fā)明技術方案內(nèi)容,依據(jù)本發(fā)明的技術實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術方案的范圍內(nèi)?!緳嗬蟆?.一種數(shù)據(jù)備份方法,其特征在于,包括:獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);根據(jù)所述總行數(shù)與預置的第一命令行選項的值,計算所述未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);當所述未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)所述總行數(shù)與所述目標行數(shù)將所述未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。2.根據(jù)權利要求1所述的方法,其特征在于,所述根據(jù)所述總行數(shù)與所述目標行數(shù)將所述未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出包括:創(chuàng)建所述每個分片各自對應的分片備份文件;獲取所述未備份的表中未處理的行對應的字段及所述未處理的行對應的字段的值,將所述未處理的行對應的字段及所述未處理的行對應的字段的值,拼接成所述結(jié)構(gòu)化查詢語目語句;當已處理的行的數(shù)量大于或等于所述目標行數(shù)時,獲取當前所有所述已處理的行對應的目標分片備份文件;獲取所述當前所有所述已處理的行的結(jié)構(gòu)化查詢語言語句各自對應的字符串,將所述各自對應的字符串壓縮寫入所述目標分片備份文件,并輸出。3.根據(jù)權利要求2所述的方法,其特征在于,所述方法還包括:獲取已處理但對應的結(jié)構(gòu)化查詢語言語句未寫入對應的目標分片備份文件的目標行及所述對應的目標分片備份文件;將所述目標行對應的結(jié)構(gòu)化查詢語言語句對應的字符串壓縮寫入所述對應的目標分片備份文件,并輸出。4.根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括:當所述未備份的表的大小小于所述第二命令行選項的值時,生成所述未備份的表對應的第一備份文件,并輸出。5.根據(jù)權利要求4所述的方法,其特征在于,所述生成所述未備份的表對應的第一備份文件包括:創(chuàng)建所述未備份的表對應的第一備份文件;獲取所述未備份的表中的各個字段及所述各個字段各自對應的值,將所述各個字段及所述各個字段各自對應的值拼接成所述結(jié)構(gòu)化查詢語言語句;輸出拼接好的所述結(jié)構(gòu)化查詢語言語句對應的字符串,并將所述字符串壓縮寫入所述第一備份文件。6.根據(jù)權利要求1所述的方法,其特征在于,所述獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù)之前,還包括:讀取預置的命令行選項,所述命令行選項包括:所述第一命令行選項、所述第二命令行選項;當所述第一命令行選項與所述第二命令行選項通過校驗時,關閉所述數(shù)據(jù)庫中所有已打開的表,凍結(jié)所述數(shù)據(jù)庫。7.根據(jù)權利要求6所述的方法,其特征在于,所述命令行選項還包括:第三命令行選項,所述關閉所述數(shù)據(jù)庫中所有已打開的表,凍結(jié)所述數(shù)據(jù)庫,包括:執(zhí)行關閉表操作,所述關閉表操作用于關閉所述數(shù)據(jù)庫中所有已打開的表;根據(jù)所述第三命令行選項的值,判斷所述關閉表操作是否執(zhí)行超時;若所述關閉表操作執(zhí)行超時,則判斷已執(zhí)行的所述關閉表操作的次數(shù)是否大于或等于預置的第一閾值;若所述已執(zhí)行的所述關閉表操作的次數(shù)小于所述第一閾值,則在等待第一預置時長后,重試所述執(zhí)行關閉表操作的步驟;若所述已執(zhí)行的所述關閉表操作的次數(shù)大于或等于所述第一閾值時,則獲取系統(tǒng)當前正在執(zhí)行的針對所述數(shù)據(jù)庫進行的第一任務信息;根據(jù)所述第一任務信息生成超時瞬間的第一任務列表,并輸出;若所述關閉表操作未執(zhí)行超時,則執(zhí)行全局讀鎖定操作,所述全局讀鎖定操作用于將所述數(shù)據(jù)庫設置為全局讀鎖定,以凍結(jié)所述數(shù)據(jù)庫;根據(jù)所述第三命令行選項的值,判斷所述全局讀鎖定操作是否執(zhí)行超時;若所述全局讀鎖定操作執(zhí)行超時,則判斷已執(zhí)行的所述全局讀鎖定操作的次數(shù)是否大于或等于預置的第二閾值;若所述已執(zhí)行的所述全局讀鎖定操作的次數(shù)小于所述第二閾值,則在等待第二預置時長后,重試所述執(zhí)行全局讀鎖定的步驟;若所述已執(zhí)行的所述全局讀鎖定操作的次數(shù)大于或等于所述第二閾值時,則獲取系統(tǒng)當前正在執(zhí)行的針對所述數(shù)據(jù)庫進行的第二任務信息;根據(jù)所述第二任務信息生成超時瞬間的第二任務列表,并輸出。8.根據(jù)權利要求1至7的任一項所述的方法,其特征在于,所述凍結(jié)所述數(shù)據(jù)庫之后,還包括:獲取所述數(shù)據(jù)庫在當前時間點的數(shù)據(jù)快照作為所述數(shù)據(jù)庫的鏡像文件;解凍所述數(shù)據(jù)庫,將所述鏡像文件作為所述數(shù)據(jù)庫,執(zhí)行所述獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù)的步驟。9.根據(jù)權利要求8所述的方法,其特征在于,所述方法還包括:獲取所述數(shù)據(jù)庫中表以外的其他備份對象;根據(jù)所述其他備份對象的類型,生成分別與不同類型的其他備份對象一一對應的第二備份文件;獲取目標備份文件,所述目標備份文件包括:所述第一備份文件、所述目標分片備份文件以及所述第二備份文件;根據(jù)所述目標備份文件生成備份元數(shù)據(jù)文件;將所述備份元數(shù)據(jù)文件壓縮后拆分為多個數(shù)據(jù)包,并發(fā)送給存儲服務器,指示所述存儲服務器將所述多個數(shù)據(jù)包進行存儲;接收所述存儲服務器返回的存儲記錄,刪除本地存儲的所述備份元數(shù)據(jù)文件及所述多個數(shù)據(jù)包。10.一種數(shù)據(jù)恢復方法,其特征在于,包括:獲取備份元數(shù)據(jù)文件,所述備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件;生成所述備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將所述數(shù)據(jù)恢復任務加入任務隊列;通過多個處理進程并行地獲取所述任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復所述數(shù)據(jù)庫中對應的數(shù)據(jù)。11.根據(jù)權利要求10所述的方法,其特征在于,所述通過多個處理進程并發(fā)地獲取所述任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,包括:根據(jù)中央處理器的處理能力確定所述多個處理進程;亂序所述任務隊列;通過所述多個處理進程并行地從所述任務列表中申請所述目標數(shù)據(jù)恢復任務;逐一讀取所述目標數(shù)據(jù)恢復任務對應的備份元數(shù)據(jù)文件中給定的結(jié)構(gòu)化查詢語言語句;通過解析器解析所述結(jié)構(gòu)化查詢語言語句的語法;通過優(yōu)化器對所述結(jié)構(gòu)化查詢語言語句的語法進行優(yōu)化;執(zhí)行所述結(jié)構(gòu)化查詢語言語句,恢復所述數(shù)據(jù)庫中對應的數(shù)據(jù)。12.根據(jù)權利要求10所述的方法,其特征在于,所述獲取備份元數(shù)據(jù)文件之前,還包括:檢查外鍵約束功能是否關閉,若未關閉,則關閉所述外鍵約束功能,使得恢復的數(shù)據(jù)的正確性不依賴于數(shù)據(jù)內(nèi)容在導入時的先后順序。13.根據(jù)權利要求10所述的方法,其特征在于,所述方法還包括:獲取所述備份元數(shù)據(jù)文件對應的二進制日志,所述二進制日志中記錄有生成所述備份元數(shù)據(jù)文件的時間點至當前時間點之間,用戶對用于生成所述備份元數(shù)據(jù)文件的源數(shù)據(jù)庫執(zhí)行更改的所有操作;根據(jù)所述二進制日志,同步所述數(shù)據(jù)庫與所述源數(shù)據(jù)庫。14.根據(jù)權利要求10至13的任一項所述的方法,其特征在于:所述備份元數(shù)據(jù)文件從存儲服務器獲取,所述備份元數(shù)據(jù)文件中包括:所述表對應的第一備份文件、以及所述數(shù)據(jù)庫中表以外的其他備份對象對應的第二備份文件。15.一種數(shù)據(jù)備份裝置,其特征在于,包括:第一獲取模塊,用于獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù);計算模塊,用于根據(jù)所述第一獲取模塊獲取的所述總行數(shù)與預置的第一命令行選項的值,計算所述未備份的表的每一分片中包含的給定的結(jié)構(gòu)化查詢語言語句的目標行數(shù);備份模塊,用于當所述第一獲取模塊獲取的所述未備份的表的大小大于或等于預置的第二命令行選項的值時,根據(jù)所述第一獲取模塊獲取的所述總行數(shù)與所述計算模塊計算的所述目標行數(shù)將所述未備份的表劃分為多個分片,生成每個分片的分片備份文件,并輸出。16.根據(jù)權利要求15所述的裝置,其特征在于,所述備份模塊包括:第一創(chuàng)建單元,用于創(chuàng)建所述每個分片各自對應的分片備份文件;第一拼接單元,用于獲取所述未備份的表中未處理的行對應的字段及所述未處理的行對應的字段的值,將所述未處理的行對應的字段及所述未處理的行對應的字段的值,拼接成所述結(jié)構(gòu)化查詢語言語句;獲取單元,用于當已處理的行的數(shù)量大于或等于所述目標行數(shù)時,獲取當前所有所述已處理的行對應的目標分片備份文件;第一備份單元,用于獲取所述當前所有所述已處理的行的結(jié)構(gòu)化查詢語言語句各自對應的字符串,將所述各自對應的字符串壓縮寫入所述目標分片備份文件,并輸出。17.根據(jù)權利要求16所述的裝置,其特征在于,所述獲取單元,還用于獲取已處理但對應的結(jié)構(gòu)化查詢語言語句未寫入對應的目標分片備份文件的目標行及所述對應的目標分片備份文件;所述第一備份單元,還用于將所述目標行對應的結(jié)構(gòu)化查詢語言語句對應的字符串壓縮寫入所述對應的目標分片備份文件,并輸出。18.根據(jù)權利要求15所述的裝置,其特征在于,所述備份模塊,還用于當所述未備份的表的大小小于所述第二命令行選項的值時,生成所述未備份的表對應的第一備份文件,并輸出。19.根據(jù)權利要求18所述的裝置,其特征在于,所述備份模塊還包括:第二創(chuàng)建單元,用于創(chuàng)建所述未備份的表對應的第一備份文件;第二拼接單元,用于獲取所述未備份的表中的各個字段及所述各個字段各自對應的值,將所述各個字段及所述各個字段各自對應的值拼接成所述結(jié)構(gòu)化查詢語言語句;第二備份單元,用于輸出拼接好的所述結(jié)構(gòu)化查詢語言語句對應的字符串,并將所述字符串壓縮寫入所述第一備份文件。20.根據(jù)權利要求15所述的裝置,其特征在于,所述裝置還包括:讀取模塊,用于讀取預置的命令行選項,所述命令行選項包括:所述第一命令行選項、所述第二命令行選項;凍結(jié)模塊,用于當所述讀取模塊讀取的所述第一命令行選項與所述第二命令行選項通過校驗時,關閉所述數(shù)據(jù)庫中所有已打開的表,凍結(jié)所述數(shù)據(jù)庫。21.根據(jù)權利要求20所述的裝置,其特征在于,所述命令行選項還包括:第三命令行選項,所述凍結(jié)模塊包括:關閉單元,用于執(zhí)行關閉表操作,所述關閉表操作用于關閉所述數(shù)據(jù)庫中所有已打開的表;判斷單元,用于根據(jù)所述第三命令行選項的值,判斷所述關閉表操作是否執(zhí)行超時;所述判斷單元,還用于若所述關閉表操作執(zhí)行超時,則判斷已執(zhí)行的所述關閉表操作的次數(shù)是否大于或等于預置的第一閾值;重試單元,用于若所述已執(zhí)行的所述關閉表操作的次數(shù)小于所述第一閾值,則在等待第一預置時長后,重試所述執(zhí)行關閉表操作的步驟;獲取單元,用于若所述已執(zhí)行的所述關閉表操作的次數(shù)大于或等于所述第一閾值時,則獲取系統(tǒng)當前正在執(zhí)行的針對所述數(shù)據(jù)庫進行的第一任務信息;輸出單兀,用于根據(jù)所述第一任務信息生成超時瞬間的第一任務列表,并輸出;凍結(jié)單元,用于若所述關閉表操作未執(zhí)行超時,則執(zhí)行全局讀鎖定操作,所述全局讀鎖定操作用于將所述數(shù)據(jù)庫設置為全局讀鎖定,以凍結(jié)所述數(shù)據(jù)庫;所述判斷單元,還用于根據(jù)所述第三命令行選項的值,判斷所述全局讀鎖定操作是否執(zhí)行超時;所述判斷單元,還用于若所述全局讀鎖定操作執(zhí)行超時,則判斷已執(zhí)行的所述全局讀鎖定操作的次數(shù)是否大于或等于預置的第二閾值;所述重試單元,還用于若所述已執(zhí)行的所述全局讀鎖定操作的次數(shù)小于所述第二閾值,則在等待第二預置時長后,重試所述執(zhí)行全局讀鎖定的步驟;所述獲取單元,還用于若所述已執(zhí)行的所述全局讀鎖定操作的次數(shù)大于或等于所述第二閾值時,則獲取系統(tǒng)當前正在執(zhí)行的針對所述數(shù)據(jù)庫進行的第二任務信息;所述輸出單元,還用于根據(jù)所述第二任務信息生成超時瞬間的第二任務列表,并輸出。22.根據(jù)權利要求15至21的任一項所述的裝置,其特征在于,所述裝置還包括:第二獲取模塊,用于獲取所述數(shù)據(jù)庫在當前時間點的數(shù)據(jù)快照作為所述數(shù)據(jù)庫的鏡像文件;解凍模塊,用于解凍所述數(shù)據(jù)庫,將所述鏡像文件作為所述數(shù)據(jù)庫,執(zhí)行所述獲取數(shù)據(jù)庫中未備份的表的大小及其總行數(shù)的步驟。23.根據(jù)權利要求22所述的裝置,其特征在于,所述第一獲取模塊,還用于獲取所述數(shù)據(jù)庫中表以外的其他備份對象;所述備份模塊,還用于根據(jù)所述其他備份對象的類型,生成分別與不同類型的其他備份對象--對應的第二備份文件;所述裝置還包括:第三獲取模塊,用于獲取目標備份文件,所述目標備份文件包括所述第一備份文件、所述目標分片備份文件以及所述第二備份文件;生成模塊,用于根據(jù)所述第三獲取模塊獲取的所述目標備份文件生成備份元數(shù)據(jù)文件;發(fā)送模塊,用于將所述生成模塊生成的所述備份元數(shù)據(jù)文件壓縮后拆分為多個數(shù)據(jù)包,并發(fā)送給存儲服務器,指示所述存儲服務器將所述多個數(shù)據(jù)包進行存儲;刪除模塊,用于接收所述存儲服務器返回的存儲記錄,刪除本地存儲的所述備份元數(shù)據(jù)文件及所述多個數(shù)據(jù)包。24.一種數(shù)據(jù)恢復裝置,其特征在于,包括:獲取模塊,用于獲取備份元數(shù)據(jù)文件,所述備份元數(shù)據(jù)文件包括數(shù)據(jù)庫中的表的每個分片對應的目標分片備份文件;生成模塊,用于生成所述獲取模塊獲取的所述備份元數(shù)據(jù)文件對應的數(shù)據(jù)恢復任務,將所述數(shù)據(jù)恢復任務加入任務隊列;恢復模塊,用于通過多個處理進程并行地獲取所述任務隊列中的目標數(shù)據(jù)恢復任務,并進行處理,以恢復所述數(shù)據(jù)庫中對應的數(shù)據(jù)。25.根據(jù)權利要求24所述的裝置,其特征在于,所述備份元數(shù)據(jù)文件從存儲服務器獲取,所述備份元數(shù)據(jù)文件中包括:所述表對應的第一備份文件、以及所述數(shù)據(jù)庫中表以外的其他備份對象對應的第二備份文件,所述恢復模塊包括:進程確定單元,用于根據(jù)中央處理器的處理能力確定所述多個處理進程;亂序單元,用于亂序所述任務隊列;申請單元,用于通過所述多個處理進程并行地從所述任務列表中申請所述目標數(shù)據(jù)恢復任務;讀取單元,用于逐一讀取所述目標數(shù)據(jù)恢復任務對應的備份元數(shù)據(jù)文件中給定的結(jié)構(gòu)化查詢語言語句;解析單元,用于通過解析器解析所述結(jié)構(gòu)化查詢語言語句的語法;優(yōu)化單元,用于通過優(yōu)化器對所述結(jié)構(gòu)化查詢語言語句的語法進行優(yōu)化;恢復單元,用于執(zhí)行所述結(jié)構(gòu)化查詢語言語句,恢復所述數(shù)據(jù)庫中對應的數(shù)據(jù);所裝置還包括:關閉模塊,用于檢查外鍵約束功能是否關閉,若未關閉,則關閉所述外鍵約束功能,使得恢復的數(shù)據(jù)的正確性不依賴于數(shù)據(jù)內(nèi)容在導入時的先后順序;所述獲取模塊,還用于獲取所述備份元數(shù)據(jù)文件對應的二進制日志,所述二進制日志中記錄有生成所述備份元數(shù)據(jù)文件的時間點至當前時間點之間,用戶對用于生成所述備份元數(shù)據(jù)文件的源數(shù)據(jù)庫執(zhí)行更改的所有操作;同步模塊,用于根據(jù)所述二進制日志,同步所述數(shù)據(jù)庫與所述源數(shù)據(jù)庫。【文檔編號】G06F11/14GK104166600SQ201410377275【公開日】2014年11月26日申請日期:2014年8月1日優(yōu)先權日:2014年8月1日【發(fā)明者】張晨,陳福榮,唐祖州,康中良,梁飛龍,崔玉明,韓全安申請人:騰訊科技(深圳)有限公司