mysql中的XtraBackup的備份原理
xtrabackup的官方下載地址爲 :
http://www.percona.com/software/percona-xtrabackup。
xtrabackup包含兩個主要的工具,即xtrabackup和innobackupex,二者區別如下:
1 xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表
2 innobackupex是一個封裝了xtrabackup的Perl腳本,支持同時備份innodb和myisam,但在對myisam備份時需要加一個全局的讀鎖。還有就是myisam不支持增量備份。
innobackupex工具的備份過程原理圖
如圖,備份開始的時候
1 首先會啓動一個xtrabackup_log後臺檢測的進程,實時檢測mysql redo的變化,一旦發現redo有新的日誌寫入,立刻將日誌寫入到日誌文件xtrabackup_log中 2 複製innodb的數據文件和系統表空間文件idbdata1到對應的以默認時間戳爲備份目錄的地方 3 複製結束後,執行flush table with read lock操作 4 複製.frm .myd .myi文件 5 並且在這一時刻獲得binary log 的位置 6 將表進行解鎖unlock tables 7 停止xtrabackup_log進程 全庫恢復的過程 這一階段會啓動xtrabackup內嵌的innodb實例,將xtrabackup日誌xtrabackup_Log進行回放,將提交的事務信息變更應用到innodb數據或表空間,同時回滾未提交的事務
增量備份
增量備份主要是通過拷貝innodb中有變更的頁(指的是LSN大於xtrabackup_checkpoints中的LSN號)。增量備份是基於全備的,第一次增量備份的數據是基於上一次全備,之後的每一次增倍都是基於上一次的增倍,最終達到一致性的增倍,增倍的過程中,和全備很類似,區別在於第二步
增量備份的恢復
和全庫恢復類似,也需要兩步
1 數據文件的恢復 分3部分 全備 增量備份和xtrabackup_log
2 對未提交事務的回滾
innobackupex的使用案例
1 創建備份用戶
進行數據庫全備
使用以下參數進行全庫備份
查看對應生成的文件
需要注意的幾個文件
刪掉某個數據庫,進行全庫恢復
關閉數據庫
恢復
以上對應的目錄就是innobackupex全備份自己創建的目錄
更改權限
[root@MASTER_03 tmp]# chown -R mysql.mysql /data/3306/data/
啓動mysqld
[root@MASTER_03 tmp]# /etc/init.d/mysqld start
發現數據是已經成功恢復
先全備
增量備份
此時再插入數據
增量備份2
增量備份的恢復
增量備份的恢復需要有3個步驟
1 恢復完全備份
2 恢復增量備份到完全備份(開始恢復的增量備份要添加--redo-only參數,到最後一次增量備份要去掉--redo-only)
3 對整體的完全備份進行恢復,回滾未提交的數據
模擬測試
測試完畢,恢復還是比較簡單的。