MySQL資料庫備份恢複基礎
MySQL常見的故障類型
對于使用者來說,資料庫中儲存的資料通常至關重要,是以要采取各種手段來防止各種可能的資料損失和資料故障。
DBA主要任務就是維持資料庫的高可靠性運作,盡量提高資料庫的連續可用時間,降低資料庫的平均恢複時間,最小化故障時的資料損失及業務影響。
在資料庫環境中,常見故障類型:
語句失敗,使用者程序失敗,使用者錯誤
執行個體失敗,媒體故障,網絡故障
其中最為嚴重的故障主要是使用者錯誤和媒體故障。
資料庫管理者(DBA)的目标是確定資料庫處于可用狀态,進而當使用者需要時可提供使用。要實作這個目标,DBA需要做的事:
1.預計導緻出現故障的常見原因并努力避免出現這些原因
2.努力提高平均故障間隔時間(MTBF),確定硬體盡量可靠,也就是通過備援方式保護關鍵元件,定期執行作業系統維護,如主從,叢集,容災
3.減少平均恢複時間(MTTR),提前确定恢複過程方案并配置備份,以便在需要時随時可用。
4.最大程度地減少丟失資料。
DBA可按照接受的最佳方案配置資料庫,以便永遠不丢失送出的事務處理。
故障類别-可分為以下幾類:
◆語句錯誤:單個資料庫操作(選擇、插入、更新或删除)失敗,軟體邏輯問題。
◆使用者程序錯誤:單個資料庫會話失敗,一般不需要幹預,分析日志觀察。
◆網絡故障:與資料庫的連接配接斷開,如:網卡壞,網絡配置問題。
◆使用者錯誤用:戶成功完成操作但是操作不正确(删了表,或輸入錯誤資料)
◆執行個體錯誤:執行個體意外關閉,看 error日志。
◆媒體故障:丢失了—個或多個資料庫檔案(OS、檔案系統、硬碟、存儲、主機)。
MySQL備份的重要性
在MySQL資料庫維護中,備份與恢複是重中之重的問題,雖然有很多時候資料庫系統運作比較慢,但是對資料庫的資料丟失來說,顯然資料丢失的損失是最大的,也是一個企業的生命價值所在。
對關鍵業務資料進行持續定期的備份是恢複政策中的一個重要部分。
如果你隻把它作為事後彌補,或者每年審計表中的應付,那麼丢失關鍵資料的風險就會明顯增加。
是以,制定一套嚴格遵循規範的資料保護規則就顯得十分重要,這套規則應由一系列清晰的備份政策所定義,I和相關業務人員可以緊密地跟蹤監控。
通常來講,備份政策中一般包含磁盤或錄音帶上初始資料的全備份,配合之後毎天的增量或差異備份。
無論采取哪種方式,至少要保持兩份備份拷貝,一份用于線上恢複,另一份則保留在離線環境中。
這樣,如果資料中心發生洪水、火災或其它災害事故,離線拷貝可用作恢複的最後手段。
什麼情況下會用到備份呢?
1)災難恢複
2)用于機關審計:資料庫在過去某一個時間點是什麼樣的。
3)跨機房的災備,需要備份資料到遠端程式。
4)人為的DDI或者是DML的語句,導緻主從庫的資料消失
5)用于業務測試。
根據伺服器狀态來分,可将其分為冷備份、溫備份和熱備份三大類
冷備份(離線備份;讀、寫操作均中止)
備份系統未安裝或未配置成與目前使用的系統相同或相似的運作環境,應用系統資料沒有及時裝入備份系統。一旦發生災難,需安裝配置所需的運作環境,用資料備份媒體(錄音帶或CD光牒)恢複應用資料,手工逐漸或自動批量追補孤立資料,将終端使用者通過通訊線路切換到備份系統,恢複業務運作。
優點:裝置投資較少,節省費用,對環境要求不高。
缺點:恢複時間較長,一般要數天至1周,資料完整性與一緻性較差。
溫備份(僅可以執行讀操作)
将備份系統已安裝配置成與目前使用的系統相同或相似的系統和網絡運作環境,安裝了應用系統業務定期備份資料。一旦發生災難,直接使用定期備份資料,手工逐漸或自動批量追補孤立資料或将終端使用者通過通訊線路切換到備份系統,恢複業務運作。
優點:裝置投資較少,對環境要求不高。
缺點:恢複時間長,一般要十幾個小時至數天,資料完整性與一緻性較差。
熱備份(讀、寫不受影響)
備份處于聯機狀态,目前應用系統通過高速通信線路将資料實時傳送到備份系統,保持備份系統與目前應用系統資料的同步;也可定時在備份系統上恢複應用系統的資料。一旦發生災難,不用追補或隻需追補很少的孤立資料,備份系統可快速接替生産系統運作,恢複營業。
優點∶恢複時間短,一般幾十分鐘到數小時,資料完整性與一緻性最好,資料丢失可能性最小。
缺點:裝置投資大,費用高,對環境要求高,平時運作管理較複雜。
總結:
冷備份伺服器( cold server)是在主伺服器丢失的情況下才使用的備份伺服器。冷備份伺服器基本上隻在軟體安裝和配置的情況下打開,然後關閉直到需要時再打開。
溫備份伺服器( Warm server)一般都是周期性開機,根據主伺服器内容進行更新,然後關機。經常用溫備份伺服器來進行複制和鏡像操作
熱備份伺服器( hot server)時刻處于開機狀态,同主機保持同步。當主機失靈時,可以随時啟用熱備份伺服器來代替。
MySQL備份的分類
按照備份後産生的副本檔案是否可以編輯,可分為邏輯備份、實體備份。
1、實體備份:
實體備份産生的資料副本都是二進制檔案,常常不可編輯,例如資料庫的二進制日志。
備份特點:
1)由資料庫檔案和目錄組成,是mysql資料目錄的全部或者部分
2)一般備份比邏輯備份快,因為純屬是檔案複制,不用像邏輯備份那樣,需要做sql的轉換;
3)備份的粒度比邏輯備份小,因為是全檔案複制了,當然比sql要精确一些;
4)實體備份的檔案可以不僅是資料庫,還可以是資料庫的日志,配置檔案;
實體備份(複制資料檔案):
實體備份就是把 MYSQL存儲好的所有檔案儲存下來。比如建立一個資料庫db之後,mysql會在 datadir/目錄下面建立一個db的目錄,那麼這個目錄下面的
所有檔案儲存下來,就是實體備份。
适用:
實體備份适用于大資料量的備份,比如你有百G級、TB級的資料,那你就适合使用實體備份;
備份方法
1.檔案系統指令:cp,scp, tar, rsync;
2.MySQL是關備份軟體;系統快照 snapshot;
邏輯備份(将資料導出至文本檔案中):
邏輯備份就是把資料庫的結構定義語句,資料内容的插入語句,全部存儲下來。然後恢複的時候,在另一個mysql伺服器執行這些語句,就可以建立另一個與之前一樣的資料庫了。備份後,資料庫管理者通常可以直接査看和編輯副本檔案中的内容。
适用:這種比較适合資料量少的資料庫。
備份方法:
1.如,使用 mysqldump等程式可以把對遠端/本地資料庫進行邏輯備份
2.SELECT… INTO OUTFILE可以把資料進行邏輯備份,但備份檔案隻能存儲在 mysql- server的機器上;
邏輯備份特點
1)邏輯備份通過查詢資料庫的資訊進行備份;
2)速度比較慢。因為擷取了資訊,然後組裝成sql語句,如果調用指令是遠端,還要把sql語句遠端傳輸
3)備份檔案要比實體備份小;
4)備份粒度隻能到表
5)沒有日志或者配置檔案;
6)備份檔案是sql語句,邏輯語句,相對來說,可移植性要好。比如我在inux備份了,可以在 windows進行恢複,實體備份就不行;
從資料收集來分,将資料備份分為完全備份、增量備份、差異備份。
1、完全備份:
完全備份是一個完整的資料備份,僅僅依靠該副本檔案就可以将資料庫恢複到某個正确的狀态。如果不借助熱備份工具,完全備份可能需要停止MySQL服務。此時MySQL将無法提供服務,在真實的業務場景中,很少真正使用完全備份。
恢複:全備即可
2、增量備份
增量備份是指在完全備份的基礎上,對更新的資料進行備份,恢複時需要借助完全備份産生的副本檔案。目前,MySQL還沒有提供真正的增量備份工具,非常菜。
簡單直接:僅備份自上一次完全備份或增量備份以來變化的那些資料;
恢複:恢複周五:全備+周一+周二+周三+周四+周五
3、差異增量:
僅備份自上一次完全備份以來變量的那部資料。
恢複:如果至周五,全備+周五的日志。
MySQL備份都備份什麼?
MySQL-般備份以下幾個部分:
1.資料檔案
2.日志檔案(比如事務日志,二進制日志)
3.存儲過程,存儲函數,觸發器
4.配置檔案(十分重要,各個配置檔案都要備份)
5.用于實作資料庫備份的腳本
MySQL備份工具簡介
1) MySQLdump(單線程)/mysqlpump(多線程)
mysql服務帶的備份工具,是一種邏輯備份工具,它支援以下方式備份:
完全、部分備份;
InnoDB:熱備;
MyISAM:溫備
2) mydumper 開源,是 mysqldump 的一個衍生,速度在兩者之間。
3)cp/tar
lvm2:快照(請求一個全局鎖),之後立即釋放鎖,達到幾乎熱備的效果;實體備份;
注意:不能僅備份資料檔案;要同時備份事務日志;
前提:要求資料檔案和事務日志位于同一個邏輯卷;
4) innobackup[收費] /Xtrabackup[免費]
由 Percona提供,開源工具,支援對 iNnodB做熱備,實體備份工具;完全備份、部分備份;完全備份、增量備份;完全備份、差異備份;
5) mysqlhotcopy實體備份工具,但隻支援 MyISAM引擎,基本上屬于冷備的範疇,實體備份,速度比較快。
6)主從複制
7)官方 mysql enterprise backup備份軟體,收費。
8)NBU等第三方備份廠家。
企業場景全量和增量的使用方法是怎樣做的呢?
1)中小公司,全量一般是每天一次,業務流量低谷執行的是全備,備份時會鎖表。
2)單台資料庫,如果增量。使用 rsync(配合定時任務頻率大點或者 inotify,主從複制),把所有的 binlog備份到遠端伺服器,盡量做主從複制。
3)大公司,周備,每周六00點一次全量,下周日-下周六00點前都是增量。
優點:節省備份時間,減小備份壓力。缺點:增量的 binlog檔案副本太多,還原會很麻煩
4)一主多從,會有一個從庫做備份,延遲同步。
MySQL備份政策
備份政策是一項事先定義的明确的時間表,確定在遇到意外删除、錯誤資訊覆寫或其它形式存儲中斷時資料仍可恢複。
這類政策通常對環境中的大部分伺服器會有預設的保護方案,并對一些關鍵業務應用或資料制定額外的政策。
比如,對于所有業務應用資料的默以備份政策可能是在周-到周五,毎晩備份到錄音帶,一套錄音帶會放在本地用于快速的本地恢複,而另一套副本資料則會放在安全的外地
MySQL如何制定合适的備份政策保證高效備份
備份就像是天氣一樣常常作為話題被人提起——“人人都在讨論備份問題”,但和天氣不一樣的是,天氣是我們無力改變的,是晴是雨我們隻能看老天爺的心情如何了,但備份上面的很多問題是可以通過備份管理者的努力來解決的。
備份政策對于企業來說比較複雜,企業在确定備份政策的時候需要考慮:
一、備份周期:指的是兩次備份之間的時間間隔。
二、備份方式:設定備份周期的同時需要考慮的問題包括采用何種備份方式。
三、自動/手動備份
四、備份媒體
五、保證良好的一緻性
六、備份成本:如費用、時間、性能開銷
七、恢複成本:如費用、時間、所能夠容忍丟失的資料量
MySQL一般情況下有幾種政策。
政策一:
直接拷貝資料庫檔案(檔案系統備份工具c)(适合小型資料庫,是最可靠的)
政策二
mysqldump備份資料庫(完全備份+增加備份,速度相對較慢,适合中小型資料庫)(MyISAM是溫備份, InnoDB是熱備份)
政策三:
Xtrabackup && lvs 快照從實體角度實作幾乎熱備的完全備份,配合二進制日志備份實作增量備份,速度快适合比較煩忙的資料庫
MySQL資料災難恢複的情況
1、系統崩潰隻剩下資料檔案的情況下的恢複,甚至資料庫檔案不存在而隻有損壞的備份檔案情況下得恢複,或者資料有丢失, binlog丢失恢複。
2、誤 delete資料恢複、誤删除表恢複(drop)、 truncate表恢複等。以及 myd/rm檔案, ibd ibdata1檔案變成0位元組。
3、各種MySql錯誤的修複:如mysql無法啟動,事務死鎖, ibdata1檔案無法啟動等等
4、MySq資料庫中資料檔案 Kibata1和ibd出現壞塊情況下的恢複。
5、MySql資料檔案被誤删除情況下的恢複。被覆寫的情況或者被老備份還原的恢複。
6、磁盤陣列上崩潰導緻的mysql資料庫無法恢複或者嚴重損壞的修複。
7、ibdata1檔案丢失或被覆寫,IBD表檔案丢失以及被覆寫的情況。
MySQL資料恢複的核心思想
1)流程制度的控制。
2)盡量不破壞原有環境。
3)業務需求的容忍度,可量化的目标,根據需求選擇停庫或鎖表或者容忍丢失部分資料。
MySQL備份恢複的驗證
備份檔案有了之後還需要對其定期的進行恢複測試,不然可能是白忙一場。因為很多情況下,有些備份檔案可能已經損壞。當我們遇到資料丢失故障時,在緊急關頭,竟然發現備份的檔案無法恢複或者資料緻性和完整性沒有達到要求,如果我們定期的對備份檔案進行恢複測試,這種悲劇可能就不會發生。
1、恢複時間及地點
每周進行次恢複測試,主要在測試機上進行
2、恢複方式
模拟某個時間點主機資料全部丢失,要求恢複到丢失時間點的所有資料,先進行全備恢複,然後根據 binlog恢複到最近時間點。
作為一名DBA,幹萬不要忽視資料備份和恢複測試的重要性。