1、xtrabackup是percona公司開發的一款基於MySQL的開源備份工具,且優於ibbackup。mysql
2、xtradb存儲引擎也是percona公司爲MySQL開發的,是InnoDB的加強版。sql
3、xtradb存儲引擎的使用:數據庫
①、編譯安裝MySQL;緩存
②、刪除原有的InnoDB源文件:innobase目錄;函數
③、下載xtradb的源代碼到,並重命名爲innobase目錄;工具
④、正常的編譯安裝。性能
4、也能夠直接使用mariaDB,同mysql,默認使用xtradb做爲默認的存儲引擎,使用無差異。spa
5、備份類型:命令行
①、InnoDB:徹底備份、增量備份線程
②、MyISAM:徹底備份
6、據官方介紹,這也是世界上惟一一款開源的可以對InnoDB和xtradb存儲引擎進行熱備的工具。
7、特色:
①、備份速度快、可靠;
②、備份過程不會打斷正在執行的事務;
③、可以給予壓縮等功能,節約磁盤空間和流量(傳輸);
④、自動實現備份檢查;
⑤、還原速度快。
8、Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
①、xtrabackup:只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
②、innobackupex:則封裝了xtrabackup,是一個腳本封裝,因此能同時備份處理innodb和myisam,但在處理myisam時須要加一個讀鎖。
9、在使用Xtrabackup時,my.cnf配置文件中,必須有datadir選項,不然須要手動在命令行上加上--datadir選項。
10、Xtrabackup對InnoDB增量備份的工做原理:
①、首先完成一個徹底備份,並記錄此時檢查點的LSN(Log Sequence Number)。
②、在進行增量備份時,比較表空間中每一個頁的LSN是否大於上次備份時的LSN,若是是,則備份該頁,同時記錄當前檢查點的LSN。
首先,在logfile中找到並記錄最後一個checkpoint(「last checkpoint LSN」),而後開始從LSN的位置開始拷貝InnoDB的logfile到xtrabackup_logfile;接着,開始拷貝所有的數據文件.ibd;在拷貝所有數據文件結束以後,才中止拷貝logfile。
由於logfile裏面記錄所有的數據修改狀況,因此,即時在備份過程當中數據文件被修改過了,恢復時仍然可以經過解析xtrabackup_logfile保持數據的一致。
11、XtraBackup備份原理:
XtraBackup基於InnoDB的crash-recovery功能。它會複製innodb的data file,因爲不鎖表,複製出來的數據是不一致的,在恢復的時候使用crash-recovery,使得數據恢復一致。
InnoDB維護了一個redo log,又稱爲transaction log,事務日誌,它包含了innodb數據的全部改動狀況。當InnoDB啓動的時候,它會先去檢查data file和transaction log,而且會作二步操做:
①、XtraBackup在備份的時候,一頁一頁地複製innodb的數據,並且不鎖定表,與此同時,XtraBackup還有另一個線程監視着transactions log,一旦log發生變化,就把變化過的log pages複製走。爲何要急着複製走呢? 由於transactions log文件大小有限,寫滿以後,就會從頭再開始寫,因此新數據可能會覆蓋到舊的數據。
②、在準備(prepare)過程中,XtraBackup使用複製到的transactions log對備份出來的innodb data file進行crash recovery。
12、XtraBackup實現細節:
XtraBackup以read-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=64個page。這個不可配置。讀1MB數據以後,XtraBackup一頁一頁地遍歷這1MB數據,使用innodb的buf_page_is_corrupted()函數檢查此頁的數據是否正常, 若是數據不正常,就從新讀取這一頁,最多從新讀取10次,若是仍是失敗,備份就失敗了,退出。在複製transactions log的時候,每次讀寫512KB的數據。一樣不能夠配置。
13、默認狀況下,Xtrabackup是作所有數據庫的備份的,但實際狀況,mysql通常不會有多個庫,通常是mysql和應用數據庫,在作全備份時,能夠選擇默認的操做,便可。
14、Xtrabackup必須在mysql運行時,才能執行備份操做。
15、Xtrabackup能夠在mysql的任何狀態下,執行還原操做,但通常的還原操做,爲了防止在還原過程當中,有數據的寫入,通常是要中止mysql的。