實作原理:
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資料本身即是在全局讀鎖時被複制出來,它們的資料一緻。