標籤:mysql中的xtrabackup的備份原理
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工具的備份過程原理圖
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/9B/55/wKiom1lh5BLx9EeFAAFqJE2_UBo591.jpg" title="2017-07-09_155308.jpg" alt="wKiom1lh5BLx9EeFAAFqJE2_UBo591.jpg" />
,備份開始的時候
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 tables7 停止xtrabackup_log進程全庫恢複的過程這一階段會啟動xtrabackup內嵌的innodb執行個體,將xtrabackup日誌xtrabackup_Log進行回放,將提交的事務資訊變更應用到innodb資料或資料表空間,同時復原未提交的事務
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M00/9B/55/wKioL1lh5E2TbZ-7AACE0FG0D4k802.jpg" title="2017-07-09_155622.jpg" alt="wKioL1lh5E2TbZ-7AACE0FG0D4k802.jpg" />
增量備份
增量備份主要是通過拷貝innodb中有變更的頁(指的是LSN大於xtrabackup_checkpoints中的LSN號)。增量備份是基於全備的,第一次增量備份的資料是基於上一次全備,之後的每一次增倍都是基於上一次的增倍,最終達到一致性的增倍,增倍的過程中,和全備很類似,區別在於第二步
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M01/9B/55/wKioL1lh5GuA-B2xAAFH7_lDh3U535.jpg" title="2017-07-09_155651.jpg" alt="wKioL1lh5GuA-B2xAAFH7_lDh3U535.jpg" />
增量備份的恢複
和全庫恢複類似,也需要兩步
1 資料檔案的恢複 分3部分 全備 增量備份和xtrabackup_log
2 對未提交事務的復原
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/9B/55/wKioL1lh5Iix38qCAACuPmccu3o754.jpg" title="2017-07-09_155726.jpg" alt="wKioL1lh5Iix38qCAACuPmccu3o754.jpg" />
innobackupex的使用案例
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/9B/55/wKiom1lh5KKBQsjTAAA8hUfupb8778.jpg" title="2017-07-09_155811.jpg" alt="wKiom1lh5KKBQsjTAAA8hUfupb8778.jpg" />
1 建立備份使用者
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M00/9B/55/wKiom1lh5LWi3kmjAABIoGmhsmE760.jpg" title="2017-07-09_155835.jpg" alt="wKiom1lh5LWi3kmjAABIoGmhsmE760.jpg" />
進行資料庫全備
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/9B/55/wKioL1lh5NKhjUSUAAAimVXNPm0105.jpg" title="2017-07-09_155905.jpg" alt="wKioL1lh5NKhjUSUAAAimVXNPm0105.jpg" />
使用以下參數進行全庫備份
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/9B/55/wKiom1lh5OTz-jCVAAHUqrChj5k724.jpg" title="2017-07-09_155930.jpg" alt="wKiom1lh5OTz-jCVAAHUqrChj5k724.jpg" />
查看對應產生的檔案
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M01/9B/55/wKioL1lh5P-i4_wOAAHcwDEQ1EY575.jpg" title="2017-07-09_155955.jpg" alt="wKioL1lh5P-i4_wOAAHcwDEQ1EY575.jpg" />
需要注意的幾個檔案
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/9B/55/wKiom1lh5RCwmHiqAAC4ogRJIJw502.jpg" title="2017-07-09_160018.jpg" alt="wKiom1lh5RCwmHiqAAC4ogRJIJw502.jpg" />
刪掉某個資料庫,進行全庫恢複
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M01/9B/55/wKioL1lh5SPxPw38AAAoPzOa2jc849.jpg" title="2017-07-09_160041.jpg" alt="wKioL1lh5SPxPw38AAAoPzOa2jc849.jpg" />
關閉資料庫
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/9B/55/wKioL1lh5TOg-6CoAAB200IMMjI851.jpg" title="2017-07-09_160104.jpg" alt="wKioL1lh5TOg-6CoAAB200IMMjI851.jpg" />
恢複
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M00/9B/55/wKiom1lh5UqToLoUAADAU8aTrTU922.jpg" title="2017-07-09_160133.jpg" alt="wKiom1lh5UqToLoUAADAU8aTrTU922.jpg" />
以上對應的目錄就是innobackupex全備份自己建立的目錄
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/9B/55/wKioL1lh5WPAolQRAAE6q4s4Ydw620.jpg" title="2017-07-09_160210.jpg" alt="wKioL1lh5WPAolQRAAE6q4s4Ydw620.jpg" />
更改許可權
[[email protected]_03 tmp]# chown -R mysql.mysql /data/3306/data/
啟動mysqld
[[email protected]_03 tmp]# /etc/init.d/mysqld start
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/9B/55/wKiom1lh5ZGBLmvuAAFEo7oZ5u0281.jpg" title="2017-07-09_160317.jpg" alt="wKiom1lh5ZGBLmvuAAFEo7oZ5u0281.jpg" />
探索資料是已經成功恢複
先全備
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/9B/55/wKioL1lh5b6TT1a_AABsqVBfPxY623.jpg" title="2017-07-09_160401.jpg" alt="wKioL1lh5b6TT1a_AABsqVBfPxY623.jpg" />
增量備份
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/9B/55/wKioL1lh5dKQleBnAAF8V7jd6wo026.jpg" title="2017-07-09_160431.jpg" alt="wKioL1lh5dKQleBnAAF8V7jd6wo026.jpg" />
此時再插入資料
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/9B/55/wKioL1lh5fSR6wh7AAA1NTDr8Dw307.jpg" title="2017-07-09_160455.jpg" alt="wKioL1lh5fSR6wh7AAA1NTDr8Dw307.jpg" />
增量備份2
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M00/9B/55/wKioL1lh5gDAPIkNAAChi-o3IWw538.jpg" title="2017-07-09_160522.jpg" alt="wKioL1lh5gDAPIkNAAChi-o3IWw538.jpg" />
增量備份的恢複
增量備份的恢複需要有3個步驟
1 恢複完全備份
2 恢複增量備份到完全備份(開始恢複的增量備份要添加--redo-only參數,到最後一次增量備份要去掉--redo-only)
3 對整體的完全備份進行恢複,復原未提交的資料
類比測試
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/9B/55/wKiom1lh5jzQEBjsAAD-pUJSH-k755.jpg" title="2017-07-09_160606.jpg" alt="wKiom1lh5jzQEBjsAAD-pUJSH-k755.jpg" />
測試完畢,恢複還是比較簡單的。
本文出自 “摯愛Linux” 部落格,請務必保留此出處http://mpflinux.blog.51cto.com/12173924/1945677
mysql中的XtraBackup的備份原理