天天看點

MySQL XtraBackup 備份原理全備流程全備還原流程  

實作原理:

XtraBackup基于InnoDB的crash recovery機制,在備份還原時利用redo log得到完整的資料檔案,并通過全局讀鎖,保證InnoDB資料與非InnoDB資料的一緻性,最終完成備份還原的功能

由于是熱備操作,在備份過程中可能有持續的資料寫入,直接複制出來的資料檔案可能有缺失或被修改的頁,而redo log記錄了InnoDB引擎的所有事務日志,可以在還原時應用redo log來補全資料檔案中缺失或修改的頁。是以為了確定redo log一定包含備份過程中涉及的資料頁,需要首先開始複制redo log

全備流程

1. 複制已有的redo log,然後監聽redo log變化并持續複制

2. 複制事務引擎資料檔案 

3. 等到資料檔案複制完成

4. 加鎖:全局讀鎖

5. 備份非事務引擎資料檔案及其他檔案

6. 擷取binlog點位資訊等中繼資料

7. 停止複制redo log

    為什麼要先停止複制redo log,再解鎖全局讀鎖?

    也是因為要保證“非事務資源與事務資源的一緻性”,保證通過redo log回放後的InnoDB資料與非InnoDB資料都是處于讀鎖期間取得的位點。

8. 解鎖:全局讀鎖

9. 複制buffer pool dump

10. 備份完成

全備還原流程

1. 模拟MySQL進行recover,将redo log回放到資料檔案中

2. 等到recover完成

3. 重建redo log,為啟動資料庫做準備

4. 将資料檔案複制回MySQL資料目錄

5. 還原完成

在recover完成後,InnoDB資料與非InnoDB資料是達成一緻的嗎

    InnoDB資料會被恢複至備份結束時(全局讀鎖時)的狀态,而非InnoDB資料本身即是在全局讀鎖時被複制出來,它們的資料一緻。

繼續閱讀