1. 程式人生 > >xtrabackup-工作原理

xtrabackup-工作原理

文件 原理 ber dir 監控 strong con ble tables

數據備份

xtrabackup是基於innodb的crash恢復功能之上的。它會拷貝innodb數據文件(這會導致數據不一致的),然後對文件執行crash恢復使其一致。

因為innodb維護了redo日誌,即事務日誌。redo日誌包含對innodb數據修改的每一個記錄。當innodb啟動,會探測數據文件和redo日誌並使二者同步(執行redo日誌,進行前滾和回滾)。

xtrabackup會記錄其啟動時的日誌序列號(log sequence number),然後拷貝數據文件。在拷貝的同時,可以會發生了對數據文件的修改。xtrabackup會運行一個後臺進程,監控redo日誌並拷貝redo日誌的變化,xtrabackup需要不斷地執行這些操作,因為redo日誌是循環使用的。

xtrabackup會使用backup鎖,和flush tables with read lock比起來,backup鎖是輕量級的鎖。backup鎖是percona server 5.6+引入的,xtrabackup自動使用backup鎖拷貝non-innodb數據文件而不會阻塞對innodb表的修改操作。server支持backup鎖時,xtrabackup會首先拷貝innodb數據,然後運行lock tables for backup,拷貝myisam表和.frm文件。完成這些操作後,開始備份文件,包括.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, .par, and .opt 文件。

backup鎖只是對myisam和non-innodb表施加,而且是在備份完innodb/xtradb數據和日誌之後。

完成數據備份後,xtrabackup會使用lock binlog for backup,阻塞對二進制日誌的修改操作。拷貝完redo日誌和取回二進制日誌的位置。然後釋放對二進制和表的鎖定。

最後,二進制日誌位置被打印到stderr,xtrabackup退出。

在prepare階段,xtrabackup會執行crash恢復,結束後,數據庫就可以被還原和使用了。

技術分享

數據還原

在prepare階段,xtrabackup會執行crash恢復,結束後,數據庫就可以被還原和使用了。

還原可以使用xtrabackup --copy-back、xtrabackup --move-back

xtrabackup會讀取my.cnf文件中的datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir變量的內容並檢查目錄是否存在。

首先,拷貝myisam表和索引;其次,innodb表,索引;最後是日誌文件。

xtrabackup --move-back也可以用來還原備份。與--copy-back不同的是,它是move文件到目標位置,這樣備份文件也被移走了,所以要小心使用

xtrabackup-工作原理