mysql資料庫恢復策略 資料庫系統恢復策略概述

2021-10-19 19:33:44 字數 3573 閱讀 4452

1 前言

儘管計算機系統的可靠性在不斷提高,資料庫系統中也採用了很多措施和方法保證資料庫系統的正確執行,但仍不可避免系統出現這樣或那樣的錯誤,導致資料庫資料丟失或破壞。

所以,資料庫系統必須採取相應的恢復措施,把資料庫系統從故障狀態恢復到乙個已知的正確狀態,這就是本文要談的資料庫的故障恢復機制。

本文主要從理論的角度介紹資料庫系統的故障恢復相關概念,文章將先介紹資料庫系統的故障型別,然後介紹對應不同故障型別資料庫系統的恢復策略。通過閱讀文章,希望大家能夠對資料庫系統的故障恢復有一定理論層面的了解。另外,本文只介紹集中式資料庫的故障恢復相關概念,關於分布式資料庫系統的故障恢復涉及到的內容較多,也更複雜,本文暫不涉及。

2 故障型別

資料庫系統的恢復機制是針對任何可能出現的故障提供相應的恢復策略,所以再談具體的恢復策略之前,讓我們先來看看資料庫系統可能出現的故障型別。

先以一張圖來說明資料庫系統中的故障型別,如下圖所示:

資料庫系統故障型別

下面具體說明各類故障型別。

1.事務內部的故障

事務內部的故障可細分為可預期的和不可預期的。可預期的事務故障是指故障的發生可以通過事務程式本身來檢測。例如,在業務中,我們可以在轉賬前先檢查轉賬後賬戶的餘額是否小於零,若發現不足,則由程式主動廢棄該事務,撤銷已做的修改,恢復資料庫到正確狀態。相反地,不可預期的事務故障是指故障的發生不能被應用程式所檢測並處理。例如,併發事務發生死鎖、算術溢位、操作員失誤等故障都是不可預期的事務故障,這類故障無法由程式本身所**。

事務內部的故障大多數都是不可預期的,發生這類故障的事務將不能正常執行到其終點位置(commit或abort)。因此,針對這類故障,資料庫恢復機制要強行廢棄該事務,使資料庫回滾到事務執行前的狀態。

2.系統故障

系統故障的表現形式是系統停止運轉,必須經過重啟後系統才能恢復正常。例如,cpu故障、系統死迴圈、緩衝區溢位、系統斷電等故障均為系統故障。這類故障的特點是:僅使正在執行的事務受到影響,但資料庫本身沒有被破壞。此時,記憶體中的資料全部丟失。一方面,一些尚未完成的事務的結果可能已寫入資料庫中;另一方面,一些已提交的事務的結果可能還未來得及更新到磁碟上(讀到這裡相信大家能夠聯想到mysql資料庫對應的刷盤機制)。這樣,故障發生後資料庫可能處於不一致的狀態。

對於系統故障,資料庫恢復機制要在系統重啟後,將所有非正常終止的事務強行廢棄,同時將已經提交的事務的結果重新更新到資料庫中,以保證資料庫的正確性。

3.儲存介質故障

儲存介質故障是指儲存資料的磁碟等硬體裝置發生的故障。這類故障的特點是:不僅使正在執行的所有事務受到影響,而且資料庫本身也被破壞。因此,此類故障是較為嚴重的故障。

對於此類故障,我們只能借助定期的備份資料庫和日誌檔案,來進行故障恢復。

綜上所述,資料庫系統中的故障可歸納為兩大類:硬故障和軟故障。硬故障通常是永久的,不能自動恢復的,如儲存介質故障(不包括使用raid可以修復的介質故障)。這種故障對於資料庫系統來說通常是致命的,應盡力避免。軟故障通常是臨時性或間歇性的,如事務內部的故障、系統故障等,對於分布式資料庫系統來說,還有通訊故障,如網路分割故障、報文丟失故障,軟故障多是由於系統不穩定造成的,比較容易恢復,如系統可通過恢復機制進行恢復或重新啟動事務恢復。系統中大多數的故障都是軟故障。

3 故障恢復策略

在介紹了資料庫系統中的故障型別後,我們繼續講解資料系統針對不同故障型別的恢復策略。

在故障恢復過程中,資料庫恢復管理器依據資料庫日誌檔案對資料庫事務進行恢復操作。本節先介紹資料庫的日誌檔案,然後介紹反做(undo)和重做(redo),最後介紹針對不同故障的恢復策略。

3.1 資料庫日誌檔案

事務是資料庫系統的基本執行單位。乙個事務對資料庫的更新操作的執行過程如下圖所示:

資料庫更新操作的執行過程

一般乙個事務的完成,不僅僅是操作序列的執行,還必須將事務執行資訊(尤其是更新操作)寫入日誌檔案。這樣,在故障發生的時候,系統的恢復機制可以根據日誌中的資訊對系統進行恢復,保證資料庫狀態的正確性,維護系統的一致性。因此,資料庫日誌檔案是用來儲存恢復資訊的資料檔案。

那麼,日誌中一般都記錄什麼資訊呢?日誌中一般會記錄事務識別符號、操作型別(插入、刪除或修改)、操作的資料項、資料項的舊值與新值、命令(begin、abort、commit)等資訊,有的日誌中還會包含檢查點資訊,檢查點是在日誌中週期設定的操作標誌,用來減少系統故障後的恢復工作量的。

3.2 反做和重做恢復策略

反做(undo)和重做(redo)相信對熟悉資料庫的同學來說已經是耳熟能詳的概念了。它們倆是資料庫恢復過程中採用的兩個典型的恢復策略,下面將分別介紹它們。在介紹它們之前,先介紹乙個概念:外存資料庫。外存資料庫是指存在於硬碟上的資料庫。修改的資料寫到外存資料庫是指該資料具有永久性。這個概念會在介紹它們的過程中用到。

1.反做

反做也稱撤銷,是將乙個資料項的值恢復到其修改之前的值,即事務的回滾。當乙個事務尚未提交時,如果緩衝區管理器允許該事務修改過的資料寫到外存資料庫(這裡涉及到資料庫的刷盤策略),一旦此事務出現故障需要廢棄時,就需對這個事務修改過的資料項進行反做,即根據日誌檔案將其恢復到修改之前的值。反做的目的是保持資料庫的原子性。

2.重做

重做是將乙個資料項的值恢復到其修改後的值,即恢復乙個事務的操作結果。當乙個事務提交時,如果緩衝區管理器允許該事務修改過的資料不立刻寫到外存資料庫(也就是當前的修改結果還在記憶體中,這時發生故障記憶體中的資料便會丟失,實際結果還沒有持久化到資料庫,也涉及到資料庫的刷盤策略),一旦此事務出現故障,需對被這個事務修改過的資料項進行重做,即根據日誌檔案將其恢復到修改後的值。重做的目的是保持資料庫的耐久性。

如果在進行反做/重做的過程中又發生了故障,則要重新進行反做處理,所以反做/重做需要有冪等性。

系統的故障恢復是以日誌檔案為基礎完成的,因此,要求事務在執行過程中滿足先寫日誌協議(wal):

在外存資料庫更新之前,應將日誌檔案中有關資料項的反做資訊寫入外存檔案。

事務提交之前,日誌檔案中的有關資料項的重做資訊應在外存資料庫更新之前寫入外存檔案。

3.3 故障恢復策略

在介紹了資料庫系統恢復涉及到的資料庫日誌、反做和重做策略概念後,我們最後看看針對軟故障和硬故障,資料庫系統相應的故障恢復模策略。

1.軟故障的恢復策略

當軟故障發生時,造成資料庫不一致狀態的原因包括:

(1)一些未完成事務對資料庫的更新已寫入外存資料庫;

(2)一些已提交事務對資料庫的更新還沒來得及寫入外存資料庫。

因此,針對這兩類原因,我們資料庫系統對應的故障恢復操作為反做和重做。

2.硬故障的恢復策略

硬故障的主要恢復措施是進行資料轉儲和建立日誌檔案。

首先,我們要定期將資料庫轉儲到其他磁碟,形成一系列備份資料庫,當資料庫被破壞,則可以將這些副本重新匯入到資料庫中,使資料庫恢復到資料轉儲時的狀態,接下來,利用日誌檔案重新執行轉儲以後的所有更新事務,將資料庫進一步恢復到故障發生時的狀態。這也就是我們常說的全量與增量備份。

4 總結

本文主要講解了資料庫系統的關於事務恢復的相關概念,先是介紹了相應的故障型別,包括軟故障與硬故障,然後介紹了資料庫系統的恢復策略,主要是通過資料庫日誌檔案、反做與重做來進行故障恢復。關於資料庫系統的恢復相關概念就介紹到這裡,希望能夠對大家有所幫助。

5 參考文獻

[1] 薩師煊,王珊編. 資料庫系統概述[m]. 4版. 北京:高教出版社,2006.5.

[2] 鄭振楣,於戈,郭敏. 分布式資料庫[m]. 北京:科學出版社,1998.

資料庫 恢復策略與資料庫映象

基本原則 登記的次序嚴格按並行事務執行的時間次序 必須先寫日誌檔案,後寫資料庫 寫日誌檔案操作 把表示這個修改的日誌記錄 寫到日誌檔案 寫資料庫操作 把對資料的修改寫到資料庫中 為什麼要先寫日誌檔案 the write ahead log 寫資料庫和寫日誌檔案是兩個不同的操作 在這兩個操作之間可能發...

mysql資料庫受損恢復 MySQL資料庫恢復

資料庫恢復是指以備份為基礎,與備份相對應的系統維護和管理操作。系統進行恢復操作時,先執行一些系統安全性的檢查,包括檢查所要恢復的資料庫是否存在 資料庫是否變化及資料庫檔案是否相容等,然後根據所採用的資料庫備份型別採取相應的恢復措施。資料庫恢復機制設計的兩個關鍵問題是 第一,如何建立冗餘資料 第二,如...

資料庫原理 恢復策略

三種不同的資料庫故障,其恢復資料庫的策略也是不同的 1 事務故障的恢復 事務故障 事務執行至正常終點前被終止 恢復方法 利用日誌檔案撤銷此事務對資料庫進行的修改 恢復步驟 特點 事務故障的恢復由系統自動完成,不需要使用者進行干預 2 系統故障的恢復 系統故障造成資料庫不一致性的原因 恢復的方法 恢復...