2012-04-18 80 views
0

比方說,假設系統發生故障,您將整個服務器的日常快照(public_html,sql文件等)用於以後的恢復。服務器快照可能會損壞MySQL事務嗎?

如果在未提交事務發生時拍攝快照,是否有可能恢復損壞的MySQL InnoDB?或者InnoDB是否會做得很好,並在恢復時放棄「不完整」的交易?

回答

1

從數據庫的角度來看,我們正在處理不乾淨的關機(即斷電)和丟失的連接,因此它會丟棄所有未提交的事務。

如果您正在拍攝服務器的快照,就像凍結所有處於低溫睡眠狀態的數據庫,那麼在恢復數據庫之後,數據庫就會清醒地期待與不存在的應用程序進行通信。

我能看到的唯一問題不是來自事務本身,而是來自數據庫本身駐留在文件中的事實。如果將文件半寫入磁盤,會怎樣?我可以看到這可能是一個問題。另一方面,可能有一些架構設計可以防止這種情況發生,因爲停電也是如此,數據庫也應該通過這種方式來實現。

0

據我所知,在一個事務中,在提交發生之前沒有任何東西被保存到數據庫中。這就是ACID的合規權利。所以沒有數據庫文件在事務處理期間被寫入,只有在之後。

此外,在我看來,數據庫'快照'應通過轉儲完成。我不是服務器管理員,所以我不知道事實,但以這種方式恢復數據會更安全。

儘管MySQL對我來說是一個灰色地帶,但我對SQL Server更有信心,所以不要把它當成事實,因爲SQL Server有自己的方法來獲取備份。

+0

這是否意味着正在進行的交易只存在於某種「內存」或「會話」中?我的印象是一些臨時數據寫在數據庫的某個地方,至少在實際的表中沒有寫入,直到提交。我知道轉儲是一種更好的方式,但我想知道MySQL InnoDB從整個服務器「快照」恢復的行爲。 – IMB 2012-04-18 06:02:38