Xtrabackup是由 Percona 開發的一個開源軟件,可實現對 InnoDB 的數據備份,支持在線熱備份(備份時不影響數據讀寫),特色以下:html
XtraBackup 有兩個工具:xtrabackup 和 innobackupex:mysql
官網:http://www.percona.com/software/percona-xtrabackup
文檔:http://www.percona.com/doc/percona-xtrabackup/2.4/index.html
中文翻譯文檔:Percona XtraBackup User Manual 閱讀筆記sql
在InnoDB內部會維護一個redo日誌文件,咱們也能夠叫作事務日誌文件。事務日誌會存儲每個InnoDB表數據的記錄修改。當InnoDB啓動時,InnoDB會檢查數據文件和事務日誌,並執行兩個步驟:它應用(前滾)已經提交的事務日誌到數據文件,並將修改過但沒有提交的數據進行回滾操做。
備份過程
Xtrabackup在啓動時會記住log sequence number(LSN),而且複製全部的數據文件。複製過程須要一些時間,因此這期間若是數據文件有改動,那麼將會使數據庫處於一個不一樣的時間點。這時,xtrabackup會運行一個後臺進程,用於監視事務日誌,並從事務日誌複製最新的修改。Xtrabackup必須持續的作這個操做,是由於事務日誌是會輪轉重複的寫入,而且事務日誌能夠被重用。因此xtrabackup自啓動開始,就不停的將事務日誌中每一個數據文件的修改都記錄下來。
準備過程
上面就是xtrabackup的備份過程。接下來是準備(prepare)過程。在這個過程當中,xtrabackup使用以前複製的事務日誌,對各個數據文件執行災難恢復(就像mysql剛啓動時要作的同樣)。當這個過程結束後,數據庫就能夠作恢復還原了。數據庫
以上的過程在xtrabackup的編譯二進制程序中實現。程序innobackupex能夠容許咱們備份MyISAM表和frm文件從而增長了便捷和功能。Innobackupex會啓動xtrabackup,直到xtrabackup複製數據文件後,而後執行FLUSH TABLES WITH READ LOCK來阻止新的寫入進來並把MyISAM表數據刷到硬盤上,以後複製MyISAM數據文件,最後釋放鎖。oracle
備份MyISAM和InnoDB表最終會處於一致,在準備(prepare)過程結束後,InnoDB表數據已經前滾到整個備份結束的點,而不是回滾到xtrabackup剛開始時的點。這個時間點與執行FLUSH TABLES WITH READ LOCK的時間點相同,因此myisam表數據與InnoDB表數據是同步的。相似oracle的,InnoDB的prepare過程能夠稱爲recover(恢復),myisam的數據複製過程能夠稱爲restore(還原)。
Xtrabackup和innobackupex這兩個工具都提供了許多前文沒有提到的功能特色。手冊上有對各個功能都有詳細的介紹。簡單介紹下,這些工具提供瞭如流(streaming)備份,增量(incremental)備份等,經過複製數據文件,複製日誌文件和提交日誌到數據文件(前滾)實現了各類複合備份方式。工具