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備份基礎知識
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- 從原始碼分析 XtraBackup 的備份原理原始碼
- MySQL:xtrabackup備份MySql
- Xtrabackup增量備份
- RHEL安裝Xtrabackup
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- MySQL8.0之XtraBackupMySql
- Xtrabackup 2.4.14使用指南
- Xtrabackup全量備份
- XtraBackup 搭建從庫的一般步驟及 XtraBackup 8.0 的注意事項
- xtrabackup 2.4 的介紹與使用
- 使用Xtrabackup遠端備份MysqlMySql
- MySQL xtrabackup for centos7.2安裝MySqlCentOS
- mysql之 xtrabackup-2.4.12 安裝MySql
- xtrabackup備份mysql“ib_logfile0 is ofMySql
- pt-online-schema-change和XtraBackup的
- pt-tools系列:xtrabackup最佳實踐
- SpringMVC工作原理詳解SpringMVC
- 如何對xtrabackup 備份限制使用IO大小
- 【MySQL】xtrabackup 2.4.12備份觸發的bugMySql
- MySQL Backup--Xtrabackup備份限速問題MySql
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- 使用Xtrabackup完整備份中恢復單表
- 想了解Xtrabackup備份原理和常見問題分析,看這篇就夠了
- 故障分析 | DDL 導致的 Xtrabackup 備份失敗
- 關於xtrabackup --slave-info引數的說明
- Percona Xtrabackup2.4.12版本安裝小記
- CentOS下使用yum方式安裝percona xtrabackup步驟CentOS
- xtrabackup備份mysql以及建立自動定時任務MySql
- 問題定位 | XtraBackup 8.0 資料重建避坑事件始末事件
- 代理伺服器的工作原理詳解伺服器
- 終於解決了《====》記一次mysql熱備份xtrabackup(沒有解決問題)MySql
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- 記一次mysql熱備份xtrabackup(沒有解決問題)MySql