XtraBackup工具詳解 Part 3 XtraBackup工作原理
實驗環境
此次實驗的環境如下
-
MySQL 5.7.25
-
Redhat 6.10
1. Percona XtraBackup 備份原理
Percona XtraBackup 利用的是InnoDB的crash-recovery功能
他拷貝非一致狀態的InnoDB資料檔案,之後利用redo日誌對資料檔案做恢復以使資料檔案一致
這是因為InnoDB維護了一個記錄InnoDB資料更改的重做日誌(redo log),也可以稱為事務日誌
恢復時,Percona XtraBackup檢查資料檔案和事務日誌,之後做兩個步驟:
- 將提交過的事務寫到資料檔案中
- 回滾未提交的事務
Percona XtraBackup 備份開始時,首先記錄日誌的序號(log sequence number
或者LSN)。之後拷貝資料檔案,與此同時,Percona XtraBackup 啟動一個後臺程式監視重做日誌,之後拷貝改變的部分
因為重做日誌會被覆蓋,所以Percona XtraBackup必須時刻監視著
2. Percona XtraBackup備份過程
Percona Server 5.6開始,Percona XtraBackup新增了backup lock特性,他相對與
FLUSH TABLES WITH READ LOCK來說更加的輕量級,使用它可以在不影響InnoDB表的DML操作下拷貝非InnoDB資料
backup lock 包括如下三個命令:
-
LOCK TABLES FOR BACKUP
-
LOCK BINLOG FOR BACKUP
-
UNLOCK BINLOG
最後大體上xtrabackup的步驟如下:
- 首先會記錄LSN位置並拷貝InnoDB資料檔案並持續跟蹤LSN變化
- InnoDB拷貝完之後執行執行LOCK TABLES FOR BACKUP命令阻止非InnoDB表的DML操作
- 之後拷貝非InnoDB資料檔案,如MyISAM等
- 之後執行LOCK BINLOG FOR BACKUP命令阻止所有可能更改二進位制日誌位置或者GTID的操作
- 之後拷貝改變redo日誌
- 最後釋放二進位制日誌和表的鎖(UNLOCK BINLOG)
這樣就保證了備份完成後innodb和非innodb的資料是一致的
注意上述過程為Percona Server 5.6及以上,對於社群版的MySQL使用的是如下命令進行上鎖
-
FLUSH NO_WRITE_TO_BINLOG TABLES
-
FLUSH TABLES WITH READ LOCK
這意味著當備份完innodb表後,非innodb的表會導致全域性的讀鎖,即不允許DML操作
另外如果備份時有長時間未結束的語句或者系統繁忙時,FLUSH TABLES WITH READ LOCK會消耗很長時間,將導致資料庫長時間無法DML操作
所以建議MySQL不要使用MyISAM引擎的表並在系統空閒時進行備份
3. Percona XtraBackup還原原理
使用 xtrabackup --copy-back 或 xtrabackup --move-back將備份的檔案還原到一個目錄
相當於Oracle的restore
預設情況下, 它會讀取my.cnf檔案中的datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir變數並檢查目錄是否存在
還原檔案的順序如下:
- 首先是MyISAM的表和索引以及其他非innodb的資料(如.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par and .opt 檔案)
- 之後拷貝innodb的表和索引
- 最後是redo log
之後是恢復資料,相當與oracle的recover,即使用redo log做恢復以使資料達到一致狀態
4. 參考資料
本專題所有內容翻譯子Percona XtraBackup的官方文件
可通過如下連結下載
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28413242/viewspace-2650765/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XtraBackup工具詳解 Part 2 xtrabackup安裝
- XtraBackup工具詳解 Part 4 XtraBackup許可權及配置
- XtraBackup工具詳解 Part 5 使用innobackupex對資料庫進行全備資料庫
- Xtrabackup備份恢復原理
- Xtrabackup之innobackupex備份恢復詳解薦
- 【Xtrabackup】Xtrabackup備份基礎知識
- xtrabackup: Error: cannot open /../../base/xtrabackup_checkpointsError
- 用xtrabackup工具建立slave節點
- innodb儲存引擎備份工具--Xtrabackup儲存引擎
- XtraBackup 2.2.8 釋出,MySQL 備份工具MySql
- Mysql 物理備份工具xtrabackup的使用MySql
- 【MySql】 MySql備份工具Xtrabackup之二MySql
- 【MySql】 MySql備份工具Xtrabackup之一MySql
- 安裝xtrabackup
- 從原始碼分析 XtraBackup 的備份原理原始碼
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- XtraBackup完整備份與增量備份的原理
- XtraBackup備份原理和優缺點介紹
- MySQL · 物理備份 · Percona XtraBackup 備份原理MySql
- MySQL Xtrabackup備份原理和實現細節MySql
- MySQL:xtrabackup備份MySql
- RHEL安裝Xtrabackup
- MySQL Percona XtraBackupMySql
- XtraBackup備份MySQLMySql
- Percona XtraBackup 2.4 xtrabackup全量、增量備份恢復流程
- MySQL DBA備份工具Xtrabackup使用指南(轉)MySql
- MySQL 備份軟體 Xtrabackup 的 xtrabackup_binlog_pos_innodb和xtrabackup_binlog_info 檔案區別MySql
- MySQL8.0之XtraBackupMySql
- xtrabackup備份mysql innodbMySql
- Xtrabackup安裝及使用
- 建立MySQL資料庫備份的好工具:XtraBackupMySql資料庫
- Xtrabackup 2.4.14使用指南
- XtraBackup實踐(一)備份
- mysql xtrabackup 遭遇嚴重bugMySql
- mysql之 percona-xtrabackup 2.4.7安裝(熱備工具)MySql
- XtraBackup 搭建從庫的一般步驟及 XtraBackup 8.0 的注意事項
- mysql之 xtrabackup原理、備份日誌分析、備份資訊獲取MySql