了解最新公司動態(tài)及行業(yè)資訊
本文分享自華為云社區(qū)《GaussDB(DWS)之物理細粒度備份恢復-云社區(qū)-華為云》,作者:我的橘子呢 。
相對于集群級備份恢復海量的文件備份恢復操作,物理細粒度備份能夠從更小的粒度、以更少的數(shù)據(jù)文件操作,對單庫、單表進行備份與恢復。在實際使用過程中,數(shù)據(jù)庫集群級的故障并非高概率事件,如何安全高效地幫助客戶備份恢復一部分數(shù)據(jù)庫元素,如schema或部分表,才是更加實際的需求,這也是細粒度備份恢復的意義所在。
物理細粒度備份以小粒度如database級、schema級、表級等為單位,對數(shù)據(jù)庫文件進行物理備份,由于相對于集群級粒度更小,因此也更加高效實用。目前Roach工具支持的物理細粒度備份恢復功能主要包括:schema級全量備份、schema級增量備份、從細粒度備份集恢復單表/多表、從集群級備份集(帶細粒度參數(shù))恢復單表或多表。這些功能基本上滿足了實際使用過程中對細粒度備份恢復的要求。物理細粒度備份恢復功能圖如圖1所示。
圖1 細粒度備份恢復功能示意圖
物理細粒度的備份能力是從Roach的基線版本繼承而來的,大部分沿用了集群級備份的設計思路,即基本的備份流程是備份行存文件,創(chuàng)建一致性點,備份xlog、clog等文件,最后備份列存文件。物理細粒度備份在此基礎上需要進一步考慮以下幾個問題。
給定對應粒度備份任務如一張表,如何在備份最少數(shù)據(jù)的情況下保證恢復該表時數(shù)據(jù)的完整性?考慮該問題需要同時從備份數(shù)據(jù)小和數(shù)據(jù)完整性兩個方面考慮。備份數(shù)據(jù)量最小最理想的情況是只備份數(shù)據(jù)庫中該表以及相關表對應的物理文件,同時不考慮數(shù)據(jù)的拷貝文件,也就是只備份節(jié)點中主DN對應的數(shù)據(jù)文件。然而從數(shù)據(jù)的完整性角度來說,只備份表對應的物理文件是不夠的,為了保證恢復階段能恢復到一致性點,需要依賴xlog、clog等日志文件,而這些文件不能以更小的粒度劃分,因此需要全部備份。圖2列出了細粒度備份在保證數(shù)據(jù)完整性的情況下所必須備份的文件示意圖。
圖2 物理細粒度備份數(shù)據(jù)內(nèi)容示意圖
現(xiàn)階段集群級備份時會將數(shù)據(jù)文件和配置文件等壓縮進同一個備份的rch文件中,在恢復單表時需要一起獲取回來并過濾,邏輯較為混亂。因此,為了恢復時能夠更精確地獲取文件,細粒度備份對數(shù)據(jù)備份結構進行了進一步改造,將不同類型的文件存儲在不同的rch文件中,以更小的粒度對存儲結構進行了劃分。如圖3所示,行列存相關的文件存儲在data目錄下,以database為單位進行了劃分,每個database目錄下存在row目錄和col目錄,分別對應存儲行存文件和列存文件。archive文件夾保存xlog相關文件,xact文件存儲clog相關文件,gloabal文件夾保存數(shù)據(jù)目錄下其他文件。
圖3 物理細粒度備份存儲結構示意圖
考慮這樣一個問題,當備份一張表時,除了備份這張表本身對應的數(shù)據(jù)文件,我們還應該備份與這張表關聯(lián)的一些輔助表,比如列存表的cudesc表、存在變長字段對應的toast表等,只有這樣才能保證恢復后這張表的可用性,那么備份的時候怎么知道該表存在哪些關聯(lián)表呢?細粒度備份采用Map文件對表關系進行組織,對表所有的關聯(lián)表及文件進行統(tǒng)一收集記錄。該信息對于細粒度備份恢復至關重要,主要有以下兩個方面的作用:
(1)備份時:得到一張表的Map信息,在備份行列存文件時,按照Map中記錄的信息,將表需要備份的相關文件加入到需要備份的file_list中,后續(xù)備份時就可以按照該file_list進行文件的備份,省去了文件的掃描動作。
(2)恢復時:恢復時根據(jù)Map信息,得到目標表相關的文件記錄,就可以對應獲取所需的數(shù)據(jù)文件,并根據(jù)表的元信息建立恢復時的路徑映射關系。
Map文件的生成是在備份行存文件之前,各節(jié)點以主DN個數(shù)為單位,并行獲取Map信息,分別生成自己的Map文件。Map信息的獲取,需要從多個level進行:
Agent –> Instance –> Database –> Schema –>Table –> RelatedRelations在得到各表對應的Map信息后,會按照一定的格式框架組織多層的json格式,并將對應的json信息以schema為單位寫入到schemaname.map中,最終持久化存儲到介質(zhì)下元數(shù)據(jù)目錄對應的節(jié)點級根路徑中:
/roach/backup_key/map/dn_6001_6002/databasename/schemaname.map??Map文件對應的json存儲內(nèi)容如圖4所示。
圖4 Map文件Json格式
考慮細粒度恢復一張表時,如何在備份集大量的rch壓縮文件中挑選出我們想要的表在哪些rch文件里。細粒度備份恢復在備份過程中會生成額外的fine_file_list信息,每張rch文件都有一個fine_file_list文件與之相對應。該fine_file_list文件記錄了對應rch文件中保存了哪些表,在恢復時就可以根據(jù)fine_file_list找到待恢復表涉及哪些rch文件,精準獲取必要的rch文件,這樣就可以大幅提升細粒度恢復的性能。
只有行列存數(shù)據(jù)的rch文件存在對應的fine_file_list文件。fine_file_list保存在節(jié)點元信息目錄下對應的文件夾中:
/roach/backup_key/fine_file_list/dn_6001_6002/row/file_0_fine_list/roach/backup_key/fine_file_list/dn_6001_6002/col/file_0_fine_list細粒度恢復是在線進行的,在進行單表或多表恢復時需要創(chuàng)建出與原表定義相同的表,再進行表物理文件的替換,這就必須知道原表的DDL元信息。因此,在備份過程中需要同時導出各個表的DDL元信息。物理細粒度備份恢復利用的GaussDB(DWS)自帶的gs_dump工具對表定義進行導出。由于該信息只用于恢復過程,因此在細粒度備份剛開始時會啟動gs_dump去導出所有的表的DDL信息,并讓備份過程與DDL導出并行,不需要阻塞等待,減少整體物理細粒度的備份時間。DDL導出流程如圖5所示。
圖5 導出DDL流程圖
導出的DDL信息以schema為單位存儲在節(jié)點元信息目錄下對應的文件夾中: ??
/roach/backup_key/dumped_ddl/databasename.schemaname經(jīng)過以上介紹,細粒度備份的關鍵步驟都已經(jīng)清楚了,下面給出細粒度備份的整體流程圖,如圖6所示。
圖6 物理細粒度備份流程圖
與集群級恢復停止集群進行數(shù)據(jù)覆蓋的方式不同,細粒度恢復采用在線恢復的方式,該方法的核心思想就是在當前集群中創(chuàng)建與原表定義完全相同的目標表,再將兩張表相關的物理文件進行一一替換。細粒度恢復的方法能夠在線進行,對現(xiàn)有集群影響較小,但同時也對恢復過程數(shù)據(jù)的控制有了更高的要求。
物理細粒度恢復的大致流程如圖7所示。
圖7 物理細粒度恢復流程圖
GaussDB(DWS)的Roach工具現(xiàn)階段支持schema級的物理細粒度備份,下面介紹如何發(fā)起物理細粒度備份以及如何從細粒度備份集中恢復一張表。
Roach工具現(xiàn)支持schema級的細粒度備份,如下為命令行中發(fā)起schema級物理細粒度備份的命令:
圖8 發(fā)起schema級備份
以下參數(shù)為必選參數(shù):
–master-port : 進程端口號–media-type : 存儲介質(zhì)–media-destination : 壓縮數(shù)據(jù)存儲路徑–metadata-destination : 元數(shù)據(jù)存儲路徑–dbname : 數(shù)據(jù)庫名稱–schema-list : 多schema清單文件名,內(nèi)容格式為每行一個schema名–physical-fine-grained : 物理細粒度參數(shù)其中指定schema清單時如果只有一個schema,也可以直接使用–schemaname參數(shù)直接指定需要備份的schema名稱,此外,同時備份多個schema時,schema需要在同一個database下。
除了schema級別備份,為支持從集群級備份集中細粒度恢復單表或多表,可以通過在集群級命令中加入物理細粒度參數(shù):–physical-fine-grained來生成細粒度恢復需要的Map文件、fine_file_list信息。如下為集群級帶細粒度參數(shù)的命令:
圖9 集群級備份帶細粒度參數(shù)
需要說明的是,帶細粒度參數(shù)的集群級備份依然是集群級的,只是為支持從該備份集細粒度恢復單表生成了額外的細粒度相關文件。
Roach工具現(xiàn)支持從細粒度備份集或(集群級帶細粒度參數(shù)備份集)恢復單表或多表,假如當前數(shù)據(jù)庫用戶不小心刪除了一張表,又不想對停止業(yè)務對整個集群進行恢復,如果之前做過物理細粒度相關備份,備份集中有這張表,那么細粒度恢復就是最好的選擇。細粒度恢復可以在線進行,不影響集群的正常使用,發(fā)起細粒度恢復的命令如下:
圖10 細粒度恢復表命令
以下參數(shù)為必選參數(shù):
–clean–master-port–media-type–media-destination–metadata-destination–backup-key : 恢復基于的備份集–physical-fine-grained : 物理細粒度參數(shù)–dbname : 數(shù)據(jù)庫名稱–table-list : 待恢復表列表,格式為schemaname.tablename–restore-target-list : 恢復后表列表,格式為schemaname.tablename其中–table-list指定了需要恢復的哪些表,–restore-target-list指定了恢復后表的名稱,要求–restore-target-list的表順序與–table-list的表順序一一對應。如果要全部恢復到原表,則這兩個表清單可以指向相同文件。兩個表清單參數(shù)對應的文件內(nèi)容格式是:每個表一行,且必須帶schema名。
細粒度備份和恢復以更小的粒度對數(shù)據(jù)文件進行了備份恢復操作??紤]到備份數(shù)據(jù)的完整性以及備份恢復的性能,細粒度備份過程增加了ddl導出、Map文件生成等關鍵步驟,其中從數(shù)據(jù)目錄下的物理文件信息到Map信息、再從Map信息到備份的rch文件對應的fine_file_list信息,形成了對備份數(shù)據(jù)文件連續(xù)的記錄鏈條?;謴瓦^程中如果出現(xiàn)缺少數(shù)據(jù)的情況,可以通過對備份過程中以上所說信息的互相對比快速定位到出現(xiàn)問題的環(huán)節(jié),因此,掌握以上信息十分關鍵,可以幫助我們更好地使用細粒度備份恢復功能。
點擊關注,第一時間了解華為云新鮮技術~