MySQL備份工具——Xtrabackup之簡介

MySQL備份工具——Xtrabackup之簡介

 

 

1、簡介

1xtrabackuppercona公司開發的一款基於MySQL的開源備份工具,且優於ibbackupmysql

 

2xtradb存儲引擎也是percona公司爲MySQL開發的,是InnoDB的加強版。sql

 

3xtradb存儲引擎的使用:數據庫

         ①、編譯安裝MySQL緩存

         ②、刪除原有的InnoDB源文件:innobase目錄;函數

         ③、下載xtradb的源代碼到,並重命名爲innobase目錄;工具

         ④、正常的編譯安裝。性能

 

4、也能夠直接使用mariaDB,同mysql,默認使用xtradb做爲默認的存儲引擎,使用無差異。spa

 

5、備份類型:命令行

         ①、InnoDB:徹底備份、增量備份線程

         ②、MyISAM:徹底備份

 

6、據官方介紹,這也是世界上惟一一款開源的可以對InnoDBxtradb存儲引擎進行熱備的工具。

 

7、特色:

         ①、備份速度快、可靠;

         ②、備份過程不會打斷正在執行的事務;

         ③、可以給予壓縮等功能,節約磁盤空間和流量(傳輸);

         ④、自動實現備份檢查;

         ⑤、還原速度快。

 

8Xtrabackup有兩個主要的工具:xtrabackupinnobackupex

        ①、xtrabackup:只能備份InnoDBXtraDB兩種數據表,而不能備份MyISAM數據表

       ②、innobackupex:則封裝了xtrabackup,是一個腳本封裝,因此能同時備份處理innodbmyisam,但在處理myisam時須要加一個讀鎖。

 

9、在使用Xtrabackup時,my.cnf配置文件中,必須有datadir選項,不然須要手動在命令行上加上--datadir選項。

 

10XtrabackupInnoDB增量備份的工做原理:

         ①、首先完成一個徹底備份,並記錄此時檢查點的LSN(Log Sequence Number)

  ②、在進行增量備份時,比較表空間中每一個頁的LSN是否大於上次備份時的LSN,若是是,則備份該頁,同時記錄當前檢查點的LSN

 

  首先,在logfile中找到並記錄最後一個checkpoint(last checkpoint LSN),而後開始從LSN的位置開始拷貝InnoDBlogfilextrabackup_logfile;接着,開始拷貝所有的數據文件.ibd;在拷貝所有數據文件結束以後,才中止拷貝logfile

 

  由於logfile裏面記錄所有的數據修改狀況,因此,即時在備份過程當中數據文件被修改過了,恢復時仍然可以經過解析xtrabackup_logfile保持數據的一致。

 

 

11XtraBackup備份原理:

 

XtraBackup基於InnoDBcrash-recovery功能。它會複製innodbdata file,因爲不鎖表,複製出來的數據是不一致的,在恢復的時候使用crash-recovery,使得數據恢復一致。

 

InnoDB維護了一個redo log,又稱爲transaction log,事務日誌,它包含了innodb數據的全部改動狀況。當InnoDB啓動的時候,它會先去檢查data filetransaction log,而且會作二步操做:

 

  ①、XtraBackup在備份的時候,一頁一頁地複製innodb的數據,並且不鎖定表,與此同時,XtraBackup還有另一個線程監視着transactions log一旦log發生變化,就把變化過的log pages複製走。爲何要急着複製走呢? 由於transactions log文件大小有限,寫滿以後,就會從頭再開始寫,因此新數據可能會覆蓋到舊的數據。

 

  ②、在準備(prepare)過程中,XtraBackup使用複製到的transactions log對備份出來的innodb data file進行crash recovery

 

12XtraBackup實現細節:

XtraBackupread-write模式打開innodb的數據文件,而後對其進行復制。其實它不會修改此文件。也就是說,運行 XtraBackup的用戶,必須對innodb的數據文件具備讀寫權限。之因此採用read-write模式是由於XtraBackup採用了其內置的 innodb庫來打開文件,而innodb庫打開文件的時候就是rw的。

 

  XtraBackup要從文件系統中複製大量的數據,因此它儘量地使用posix_fadvise(),來告訴OS不要緩存讀取到的數據,從而提高性能。由於這些數據不會重用到了,OS卻沒有這麼聰明。若是要緩存一下的話,幾個G的數據,會對OS的虛擬內存形成很大的壓力,其它進程,好比 mysqld頗有可能被swap出去,這樣系統就會受到很大影響了。

 

  在備份innodb page的過程當中,XtraBackup每次讀寫1MB的數據1MB/16KB=64page。這個不可配置。讀1MB數據以後,XtraBackup一頁一頁地遍歷這1MB數據,使用innodbbuf_page_is_corrupted()函數檢查此頁的數據是否正常, 若是數據不正常,就從新讀取這一頁,最多從新讀取10次,若是仍是失敗,備份就失敗了,退出。在複製transactions log的時候,每次讀寫512KB的數據。一樣不能夠配置。

 

13默認狀況下,Xtrabackup是作所有數據庫的備份的,但實際狀況,mysql通常不會有多個庫,通常是mysql和應用數據庫,在作全備份時,能夠選擇默認的操做,便可。

 

14Xtrabackup必須在mysql運行時,才能執行備份操做。

 

15Xtrabackup能夠在mysql的任何狀態下,執行還原操做,但通常的還原操做,爲了防止在還原過程當中,有數據的寫入,通常是要中止mysql

相關文章
相關標籤/搜索