快照與備份有什麼區別?快照是備份的其中一種么?還是兩種不同的概念?


備份是一種行為,快照一種技術手段,比如MySQL資料庫備份有哪些技術手段,則有:mysqldump、xtrabackup、innodbhot backup、snapshot(利用文件系統的快照,ZFS、LVS等)等。


快照與備份是兩個不同的概念.

先來看快照.

快照,其本質類似於資料庫的照片,也就是在某個特定時間點(創建快照的時間點)給資料庫拍個照放在那兒.但是這個照片是一個新的資料庫,可以應用SQL語句.

快照資料庫里的數據是不變的.創建快照後,系統會對原資料庫的所有數據頁做個標識,如果數據頁在創建快照後被修改,會複製一個數據頁出來,沒有修改的數據頁則不會有快照(原資料庫和快照資料庫共用該數據頁).

從這樣來看,快照存在的時間越長,對系統的壓力會越大(要維護的變化數據頁太多).

一般來說,快照用在資料庫的鏡像機上,因為鏡像機上的資料庫永遠是Restoring狀態,可以在某個特定的時間點生成一個快照,這樣就可以在鏡像機上提供一個可訪問的資料庫,用來為數據倉庫提供數據源比較合適.

再來看備份.

備份,其本質是一個副本.相當於在某個時間點把資料庫里的所有對象內容都COPY一份,放到一個特定的文件里(備份文件,一般是.bak).

這個文件不是一個資料庫,不能直接應用SQL,必須先通過還原的方式還原到一個資料庫(可以是和原資料庫名稱一致,也可以是一個新的資料庫),之後才能訪問裡面的數據.

因為備份的結果是文件,這個文件可以被COPY走,或者寫入磁帶(放到銀行里),從而實現離線容災.

此外,備份是個很複雜的概念,還涉及到資料庫的恢復模型、日誌處理等很複雜的東西,需要自己先系統學習下備份還原的相關概念。


其他的快照我不太了解,我只說虛擬機的快照

如果把你的操作系統(比如vmdk)比作一個安裝好的遊戲,那麼快照就是一個存檔,你可以存多個存檔,需要時單獨調取。除非你的快照存了很長時間,否則快照大小都不會太大,跟遊戲存檔差不多(除非是fm那種)

快照的作用通常有兩種,測試和備份。

測試的話就是如果你想對操作系統做某種不確定結果的很危險的操作,那麼你可以先做個快照存個檔,當你的操作造成不可逆的結果比如藍屏時,如果沒有快照那麼你只能重裝系統或者ghost恢復,不管哪種你都需要一定的時間重裝系統甚至是大量時間重裝應用。而有快照的話只要花5分鐘以內的時間讀取存檔再重啟系統就能恢復到做快照時的那個狀態。當然你也可以在操作前做一次備份,但是如果是資料庫備份,你無法保存操作系統的狀態。而如果是虛擬化的備份,那麼其實跟快照是差不多的。

備份的話其實就是增量的作用,像很多虛擬機備份軟體比如vmware自帶的vdp就是靠快照的。第一次全備沒快照什麼事(實際上由於全備時間相當長,如果是開機狀態系統還是會先做一次快照,分兩次備份),相當於把你的虛擬機整個克隆到備份盤上。而之後的增量,差不多就相當於把發生變化的那部分存到快照里,然後把快照拷貝到備份里整合到一起,這時你的備份的狀態就跟你的源系統是同一個狀態了。用遊戲的理解就是你把存檔拷貝到另一個安裝該遊戲的電腦里,那麼這台電腦的遊戲進度就跟你原來那個一樣了,但是首先你得有這個遊戲。

但實際上快照還是有一些問題的,我用快照備份的時候經常會遇到快照卡住導致備份作業報錯,需要先刪除快照再重啟作業。

同時快照里只保存了一部分數據,如果你的vmdk丟失,光靠快照是沒辦法恢複數據的。也就是如果你遊戲壞了,留著存檔也是不能玩遊戲的,你需要重新安裝遊戲,如果你之前沒有保留安裝文件,網上又下不到,那麼你的存檔就完全失去意義了。


可以理解為:使用文件快照的方式實現文件備份,但單說快照(snapshot)的話,他是某一時間點(版本)你能看到的該時間點備份文件狀態的全貌,通過文件的快照(全貌)你能恢復到特定時間點(版本)的文件狀態。

那git版本控制圖例來說明:

上圖文件的初始狀態是:A B C,隨著時間的變化,他們可能變化成A2 B2 C3不等。注意上圖虛線框部分,在當前版本下並沒有保存文件的實體,實體存在之前的版本中,因為文件沒有發生改變,如果改變則如實保存下來(無虛線框部分),沒有發生改變得文件只需保存之前文件的引用即可。這樣可以節省下一定的存儲空間(佔用的空間為上圖無虛線框部分的文件總和),同時你可以快速的取出備份文件而無需過多的計算(差異備份取出時則需要一定計算)。直觀上,如果你從上圖 A B C處(紅色標記部分)向前拍照的話,你會看到該時間點文件的全貌,這就是文件快照

另一種實現文件備份的方式是通過差異比較

每個版本只保存文件的變化,這種方式比快照方式要節省存儲空間,但恢復備份的時候會花費額外的計算


單指快照這個詞語的話,它表示相應數據在某個時間點的映像。

它其實並不完全算是一種備份方式,而是一種概念

備份的時候(虛擬機或者是系統備份軟體),如果數據不斷變動(比如備份操作系統所在磁碟),程序就會選定某一點為備份的時間點,只備份在該點的映像(叫做該點的快照),從該點開始的所有修改不會保存。

資料庫並發控制方面:每個更新進程保持某點所有已提交的數據的一個拷貝,事務只修改這個快照當中的所有值,然後通過 先提交獲勝 或者 先更新獲勝 策略來決定將某個快照寫入到資料庫中

資料庫備份和上面系統盤備份類似


快照(snapshot):

在這個點上的所有vm的狀態,包括內存和硬碟

備份(backup):

vm基本沒有備份的官方概念,通常是手動把vm的各種文件拷貝到另個地方,如果是磁碟備份就拷貝磁碟文件,如果是配置備份就拷貝vm的各種配置文件。

p.s. 按道理snapshot要比備份慢,他等於所有的東西都備份了,包括磁碟,但實際上snapshot這功能的實現走了個捷徑,他讓vm從snapshot的時間點上開始,對所有寫磁碟的操作給寫入到另一個對你透明的虛擬磁碟(或者文件)上,這樣的差異性的寫入,也達到了snapshot的功能,畢竟能恢復到這個時間點,否則嚴格的按照snapshot的概念,肯定是要把所有數據全部拷一遍的,包括內存。


也在學習這個問題,搜到了一個說法,貢獻給題主:

Virtual Machine: the difference between snapshot and backup

  • Virtual machine restored from a backup will systematically need to be power on after restore.
  • Virtual machine reverted to a previous snapshot can already have the power on state.

這大概是最明顯的區別


二者不同,關於原理的不同上面各位已經說的很清楚了,實際使用中來說備份可以用來恢複數據,快照則不能


推薦閱讀:

伺服器虛擬化到底有哪些好處?
如何看待 KubeCon"17 上發布的 Kata Containers?
VMware 為什麼把 Workstation 和 Fusion 團隊給撤了?
虛擬化與雲計算有什麼區別?
硬體虛擬化的原理是什麼?

TAG:備份 | 資料庫 | 操作系統 | 虛擬機 | 虛擬化 | 快照 |