分享到

引言

備份資料庫是資料管理中最重要的例行工作之一。資料通常是組織管理的最重要資產之一,因此,能夠從意外刪除、資料損壞、硬體故障和其他災難中恢復是高度優先事項。

雖然識別可靠備份的價值並不困難,但確定具體細節卻並非總是那麼簡單。備份機制、介質、排程、保真度級別和安全性都是你需要考慮的因素,並且正確的組合通常因專案而異。

在本指南中,我們將探討你在決定資料庫備份策略時必須做出的關鍵決策。我們將涵蓋不同的備份方法,在資料生命週期的各個階段儲存資料的位置,並討論安全性如何以各種方式與備份設計相交叉。

為什麼資料庫備份很重要?

在繼續之前,強調適當備份能為你的團隊帶來什麼價值可能會有幫助。一些主要好處包括:

  • 硬體故障後重建:硬體故障可能影響任何系統,並且通常是不可預測的。全面的備份允許你在更換故障元件後恢復資料。
  • 檔案損壞後恢復:資料損壞是另一種可能由軟體錯誤、硬體問題或環境因素導致的情況。多層備份可以讓你用備份集中的良好版本替換損壞的資料。
  • 從意外刪除中恢復:使用者錯誤也可能從資料庫中刪除有價值的資料。透過備份,你可以恢復這些資料,避免永久性丟失。
  • 審計和合規性:許多行業都有特定的備份和審計跟蹤標準,以滿足合規性要求。你可能被迫實施強大的備份例行程式,作為你在各種情況下處理使用者資料協議的一部分。
  • 進行更改時的安心:擁有可靠的備份使更改軟體、環境或操作的風險降低。你可以自信地進行更改,因為你知道如果出現問題,你不會冒組織資料丟失的風險。

備份型別

有許多不同的備份型別你可能需要考慮。在本節中,我們將介紹一些你可以執行的不同備份以及它們如何組合成一個更全面的系統。

完全備份

完全備份是將整個資料集從原始位置複製的備份。它們的範圍是所有備份中最大的,因為根據定義,它們讀取和寫入源到目標的所有資料。

完全備份很重要,因為它們為你提供了一份完整的資料集副本,可用於部分或完全恢復丟失的資料。每個策略都應包含完全備份作為其例行工作的核心元件。

雖然完全備份是必要的,併為大多數備份策略奠定了基礎,但它們也有一些主要的缺點。由於它們必須讀取和寫入整個資料集,因此可能需要很長時間才能完成,並可能在此期間一直佔用系統資源。此外,隨著時間的推移維護資料庫的許多完整副本會消耗大量儲存空間。

差異備份

差異備份複製自最近一次完全備份以來所有已更改的資料。這允許你每備份週期執行一次昂貴的完全備份,然後將進一步的更改記錄到以完全備份為起點的小型備份中。

差異備份解決了頻繁進行完全備份帶來的一些核心問題。它們比完全備份小,因此佔用更少的儲存空間,並且執行速度更快。

雖然差異備份是對完全備份的改進,但它們仍有一些缺點。自最近一次完全備份以來,時間越長,差異備份就會越大。此外,擁有多個差異備份可以讓你構建不同的時間點,但代價是基本上多次備份相同的更改。

增量備份

增量備份是對差異備份所用策略的修改。差異備份總是記錄自上次完全備份以來的差異,而增量備份則記錄自上次完全備份增量備份以來的差異。這意味著增量備份不是總是在完全備份上分層,而是可以透過從完全備份開始,然後恢復多個增量備份來恢復資料。

該系統允許你頻繁備份,同時只記錄系統中發生的每個更改一次。每個備份將只包含自上次執行任何備份以來發生的更改。這有助於控制每個增量備份的大小,並允許你透過將最近的完全備份與不同數量的增量備份相結合來構建不同的時間點。

增量備份的一個缺點是資料恢復可能會稍微複雜一些。自完全備份以來時間越長,你需要應用更多的增量備份才能達到最近的更改。這可能比恢復單個完全備份和(最多)單個差異備份花費更長的時間。

預寫日誌或事務日誌備份

資料庫通常會實施安全機制,以幫助從系統崩潰和不安全關機中恢復。根據系統的不同,這些可能被稱為預寫日誌(WAL)或事務日誌。雖然這些主要用於崩潰恢復目的,但它們也可以作為備份策略的一個元件,以實現更靈活的歸檔。

基於 WAL 的備份的基本思想是對資料庫的檔案系統進行定期備份,然後使用 WAL 將資料庫恢復到一致狀態,並重放備份後發生的任何更改。這聽起來與增量備份相似,但存在一些關鍵差異。

第一個重要區別是這兩個元件使用不同的介質。此處的完全備份是對資料庫檔案的備份,而不考慮記錄鎖定在一致狀態。然後,WAL 負責修復資料的狀態並將其更新到你想要恢復的時間點。

此係統也比傳統的增量備份更靈活,因為單個 WAL 可以重放到不同的時間點。這為你提供了選擇要恢復多少資料的選項。這種備份方式的一個缺點是它會影響整個資料庫系統。你不能只恢復資料庫的部分內容而保持其他部分不變。因此,它不適用於恢復單個表或其他資料庫物件。

線上備份與離線備份

在決定備份策略時,需要記住的一點是,某些備份機制無法在即時系統上執行。

需要系統離線的備份方法通常有此限制,以確保工具可以在特定時間點捕獲資料庫的一致檢視。如果系統正在更新並且記錄在備份執行時發生更改,那麼到程序完成時,開始時的資料可能無效。

然而,離線備份確實有一些優點。關閉資料庫意味著它不必與活躍使用者共享資源,這可以使其更快地完成。備份過程本身也可以簡單得多,因為不會有任何程序主動更改資料。

話雖如此,在許多情況下,為每次備份關閉主資料庫是不可接受的。幸運的是,有一些備份方法專門設計用於即時系統。通常,這涉及使用實用程式直接查詢資料庫系統,以便可以將資料庫結構和資料複製到檔案系統。除了所需的許可權,這與普通客戶端請求表結構資訊和其中包含的資料沒有太大區別。

這些“邏輯”備份工具(與處理原始檔案的物理工具相對)的主要好處之一是它們可以依賴資料庫自身的能力在特定時間點呈現統一一致的資料快照。在此上下文中,備份過程作為資料庫使用者操作,因此此功能的代價是它將與其他客戶端爭奪有限的資料庫資源。

複製是備份嗎?

對於一些使用者來說,一個令人困惑的問題是,如果配置了複製,為什麼還需要資料庫備份。

資料庫複製是一種將更改日誌從一個伺服器流式傳輸到另一個伺服器,以在不同系統上映象更改的方法。與備份一樣,這也建立了系統資料的副本。然而,由於幾個重要原因,複製不應被視為安全的備份策略。

在大量故障場景中,複製無法像備份那樣保護你的資料。確保所有更改都複製到輔助伺服器的相同機制也會複製你的主資料庫的任何問題。例如,如果主資料庫上的記錄被無意刪除,該更改也將在任何下游副本上執行。相同的過程意味著損壞的資料也將被傳播。

複製不是備份的另一個原因是它沒有明顯的恢復資料能力。雖然你可以在伺服器之間來回複製更改,但複製不關心保留資料的先前版本,並且任何歷史資料檢視都可能在日誌輪換時丟失。這種“不足”提醒我們,複製主要旨在幫助組織提高可用性和效能,而不是作為資料儲存工具。

話雖如此,複製可以是備份和災難恢復計劃的重要組成部分。例如,在主資料庫硬體故障的情況下,複製可能很有用。在這種情況下,管理員可以迅速將複製的追隨者提升為領導者角色,並繼續處理客戶端請求,以避免漫長的恢復過程。一些組織還會設定“延遲”副本,該副本僅在一段時間後才應用更改,從而允許他們在必要時透過切換到副本快速“回滾”資料庫狀態。

複製通常涉及備份過程的另一個情況是作為備份操作的目標。很多時候,備份副本比備份主伺服器更容易。例如,為了獲得一致的檔案級備份,你可以將輔助資料庫配置為生產資料庫的副本。一旦資料庫同步,你可以暫時關閉複製,並對副本執行備份,而不會影響你的生產流量。備份完成後,你可以重新打開復制,以使伺服器與備份視窗期間發生的更改重新同步。

備份如何影響安全性?

備份策略以幾種不同的方式與安全考慮因素交叉。

備份可以透過在勒索軟體攻擊等場景中提供輔助資料來源來幫助防範某些安全事件。例如,如果入侵者能夠訪問並加密你的主資料庫的內容,訪問歷史快照可能會為你提供更多解決問題的方法。為了實現這一點,你的備份目的地必須與你的源資料處於不同的安全上下文,以防止攻擊者也影響你的備份。

重要的是要理解,你的安全策略需要體現在你的備份策略中,否則你在備份資料時可能會無意中暴露敏感資訊。例如,如果你的生產系統圍繞個人身份資訊 (PII) 實施安全性,你的備份應以維護該安全級別的方式構建。這可能意味著對不同型別的資料使用單獨的加密,或對不同型別的資料使用單獨的備份位置。你的具體情況將決定你需要在備份策略中納入何種型別的保護措施。

在某些情況下,對於收集後不久就不再有價值的敏感資料,值得考慮備份這些資料。系統收集或生成的某些型別的資料在當下可能有用,但如果長期儲存,則可能增加風險。如果從資料中獲得的價值與其時效性密切相關,你最好將其從備份集中排除。

備份儲存位置

在設計備份策略時,你需要做出的一個決定是希望將實際的備份資料儲存在哪裡。許多不同的因素可能會影響哪種備份目的地最適合你。

在許多情況下,選擇備份目的地是在易於訪問性、成本、安全性和便利性之間進行權衡。現場備份可以實現快速備份,但管理物理磁碟可能超出你的管理意願。此外,現場備份無法防禦火災、洪水或盜竊等特定站點災難。另一方面,基於雲的備份可能很方便,但可能會將你繫結到特定提供商,成本更高,並且恢復時間可能更長。

大多數情況下,使用多個儲存位置和介質是明智的選擇,以幫助平衡風險和收益,並獲得額外的防資料丟失保護。例如,你可以使用 Amazon S3 等物件儲存提供商作為主要備份輪換的目標。每月左右,你可能會將其中一些備份移至 Amazon S3 Glacier 等歸檔儲存以進行更長時間的儲存。你可能還希望將資料備份到與生產基礎設施不同的提供商。

備份技巧

既然我們已經涵蓋了強大備份策略的許多組成部分,我們可以來看看一些你可能需要考慮的一般建議。

建立備份輪換策略

你需要弄清楚的第一件事是你希望多久執行一次備份,以及哪種備份型別組合最有幫助。為此,你需要建立一個備份輪換,這樣你就可以根據需要頻繁地備份,而不會使用不必要的儲存量。

備份輪換基本上是一個時間表,它確定在什麼間隔採取何種型別的備份。通常,組織會實施輪換,以便他們可以擁有許多最近的備份,同時仍保留有用數量的歷史備份作為存檔。時間表通常基於備份機制的效能影響、你需要採取的備份型別、你的備份儲存容量和成本來建立。

作為一種相當傳統的備份策略示例,你可以從每週進行一次資料庫的完全備份開始。在其他日子裡,你可以安排增量備份,以便你可以恢復到任何特定日期。你可能希望在任何時候保留兩個完全備份以及所有中間的增量備份。你還可以持續存檔每日 WAL 資料,以便可以恢復到當天的任何特定時間點。

當新的備份發生時,最舊的備份可能會被刪除或偶爾轉移到長期儲存。這使你在需要時可以訪問歷史資料,但存檔不再保留在你的常規備份輪換中。這樣的系統可以幫助你獲得恢復選項,同時最大限度地減少總儲存量的長期增加。

安排和自動化備份過程

一旦你確定了備份輪換策略,重要的是要儘可能多地安排和自動化該過程。確保你的備份在無人監督的情況下進行是保護資料安全的重要組成部分。

大多數備份機制都包含排程元件,因此在大多數情況下不需要特殊的工作。然而,重要的是要確保你已建立機制,以便在計劃備份未發生時提醒你。這可能是備份失敗時的電子郵件警報,或者向組織監控的聊天頻道傳送的 ping 通知。

自動化備份過程可能還需要你考慮如何最好地實施你的安全要求和訪問要求。基於拉取的備份系統(備份目標從你的生產系統拉取資料)是否合理?備份過程需要對你的系統進行哪種型別的訪問?你可以刪除哪些許可權以限制備份賬戶的範圍和影響?這些是你在實施備份系統,特別是在自動化該過程時需要問自己的問題。

經常測試你的備份

一個健壯的備份系統中最重要且經常被忽視的活動之一是測試。你需要定期測試你的備份檔案是否可以成功用於恢復資料。如果你無法保證你的備份有效,那麼整個過程的價值將非常有限或毫無價值。

測試備份涉及將備份資料應用於一個乾淨的系統,或應用於具有部分或不同資料的系統。瞭解你可以在這些場景中恢復,以及你需要執行的精確恢復過程,這一點很重要。這不僅驗證了備份歸檔的完整性,還確保你的組織知道在高壓場景下必須執行哪些步驟來恢復系統。它還為你提供了關於不同型別資料恢復可能需要多長時間的寶貴資料。

備份可以不時手動測試,但理想情況下,恢復過程應作為你為其餘備份實施的自動化的一部分。備份可以恢復到測試環境,並且可以執行測試套件以確保資料具有你期望的值和結構。如果你確實自動化了備份測試,請不要忘記在恢復失敗時設定警報。

結論

在本指南中,我們探討了資料庫備份為何如此重要,並介紹了在實施備份時需要考慮的一些事項。我們討論了備份的優勢、不同型別和範圍的備份、線上備份和離線備份之間的差異、複製不是備份策略的原因等等。

熟悉作為組織你有哪些選擇,以及不同的決策如何影響你的效能、安全性和可用性至關重要。雖然每個專案的備份需求都不同,但在需要持久、可信的長期儲存以幫助從資料問題中恢復方面,存在共同點。花時間梳理你的需求並制定全面計劃,將使你能夠安全、自信地邁步向前,風險更小。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直在撰寫關於資料庫、Linux、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這讓所有相關方都鬆了一口氣。
© . This site is unofficial and not affiliated with Prisma Data, Inc.