xtrabackup 原理详解
引用網址:https://yq.aliyun.com/articles/45746
xtrabackup是Percona公司CTO Vadim參與開發的一款基于InnoDB的在線熱備工具,具有開源,免費,支持在線熱備,備份恢復速度快,占用磁盤空間小等特點,并且支持不同情況下的多種備份形式。xtrabackup的官方下載地址為http://www.percona.com/software/percona-xtrabackup。
xtrabackup包含兩個主要的工具,即xtrabackup和innobackupex,二者區別如下:
(1)xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;
(2)innobackupex是一個封裝了xtrabackup的Perl腳本,支持同時備份innodb和myisam,但在對myisam備份時需要加一個全局的讀鎖。還有就是myisam不支持增量備份。
1.備份過程
innobackupex備份過程如下圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (圖1 innobackupex備份過程,本文中所有圖都是google所得)
在圖1中,備份開始時首先會開啟一個后臺檢測進程,實時檢測mysql redo的變化,一旦發現redo中有新的日志寫入,立刻將日志記入后臺日志文件xtrabackup_log中。之后復制innodb的數據文件和系統表空間文件ibdata1,待復制結束后,執行flush tables with read lock操作,復制.frm,MYI,MYD,等文件(執行flush tableswith read lock的目的是為了防止數據表發生DDL操作,并且在這一時刻獲得binlog的位置)最后會發出unlock tables,把表設置為可讀可寫狀態,最終停止xtrabackup_log。
2.全備恢復
這一階段會啟動xtrabackup內嵌的innodb實例,回放xtrabackup日志xtrabackup_log,將提交的事務信息變更應用到innodb數據/表空間,同時回滾未提交的事務(這一過程類似innodb的實例恢復)。恢復過程如下圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(圖2 innobackupex 恢復過程)
3.增量備份
innobackupex增量備份過程中的"增量"處理,其實主要是相對innodb而言,對myisam和其他存儲引擎而言,它仍然是全拷貝(全備份)
"增量"備份的過程主要是通過拷貝innodb中有變更的"頁"(這些變更的數據頁指的是"頁"的LSN大于xtrabackup_checkpoints中給定的LSN)。增量備份是基于全備的,第一次增備的數據必須要基于上一次的全備,之后的每次增備都是基于上一次的增備,最終達到一致性的增備。增量備份的過程如下,和全備的過程很類似,區別僅在第2步。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( 圖 3 innobackupex增量備份過程)
4.增量備份恢復
和全備恢復類似,也需要兩步,一是數據文件的恢復,如圖4,這里的數據來源由3部分組成:全備份,增量備份和xtrabackup log。二是對未提交事務的回滾,如圖5所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( 圖4 innobackupex 增量備份恢復過程1)
? ? ? ?( 圖5 innobackupex增量備份恢復過程2)
?
總結
以上是生活随笔為你收集整理的xtrabackup 原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Un*、IdL分别突变情况下双闭环直流调
- 下一篇: 【电机控制入门】——电机控制书籍推荐