本章節摘選自Percona官網。
Percona XtraBackup is an open-source hot backup utility for MySQL - based servers that doesn’t lock your database during the backup.
Whether it is a 24x7 highly loaded server or a low-transaction-volume environment, Percona XtraBackup is designed to make backups a seamless procedure without disrupting the performance of the server in a production environment.
Percona XtraBackup can back up data from InnoDB, XtraDB, MyISAM, and MyRocks tables on MySQL 8.0 servers as well as Percona Server for MySQL with XtraDB, Percona Server for MySQL 8.0, and Percona XtraDB Cluster 8.0.
Percona XtraBackup是基於MySQL伺服器的開源熱備份程序,在備份過程中不會鎖定資料庫。
無論是24x7高負載伺服器還是低事務量環境,Percona XtraBackup都能在不影響生產環境伺服器性能的前提下完成備份過程。
Percona XtraBackup可以備份InnoDB,XtraDB, MyISAM等引擎的數據,並且支持備份MyRocks tables類型的數據。
注意:版本8.0.6後才添加了對MyRocks存儲引擎的支持,Percona XtraBackup 8.0還不支持TokuDB存儲引擎。
Percona XtraBackup 8.0 does not support making backups of databases created in versions prior to 8.0 of MySQL, Percona Server for MySQL or Percona XtraDB Cluster. As the changes that MySQL 8.0 introduced in data dictionaries, redo log and undo log are incompatible with previous versions, it is currently impossible for Percona XtraBackup 8.0 to also support versions prior to 8.0.
Percona XtraBackup 8.0 不支持 8.0之前的版本的MySQL 、Percona Server for MySQL或 Percona XtraDB Cluster。
MySQL 8.0在redo日誌和undo日誌中引入的更改與以前的版本不兼容,因此Percona XtraBackup 8.0目前不支持8.0之前的版本。
本文實驗環境MySQL版本為5.7,根據兼容性提示,備份工具我們選用Percona XtraBackup* 2.4。官網文檔地址
Percona XtraBackup is the world’s only open-source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits:
Backups that complete quickly and reliably
Uninterrupted transaction processing during backups
Savings on disk space and network bandwidth
Automatic backup verification
Higher uptime due to faster restore time
Percona XtraBackup是一款唯一的開源的、免費MySQL熱備軟體,能夠InnoDB和XtraDB 資料庫完成非阻塞備份。
使用Percona XtraBackup,您可以獲得以下好處:
快速可靠地完成備份
備份期間不間斷的事務處理
節省磁碟空間和網絡帶寬
自動備份驗證
更快的恢復時間,提升正常運行時間
Percona XtraBackup提供以下功能:
創建InnoDB熱備份而不會暫停資料庫
進行MySQL的增量備份
將壓縮的MySQL備份流式傳輸到另一臺伺服器
在線在MySQL伺服器之間移動表
輕鬆創建新的MySQL複製副本
備份MySQL而不增加伺服器負載
Percona XtraBackup基於InnoDB的故障恢復(crash-recovery )功能。
它會複製InnoDB數據文件,從而導致數據內部不一致;但隨後它將對文件執行故障恢復,使其再次成為一致的可用資料庫。
因為InnoDB維護redo日誌,也稱為事務日誌。它包含對InnoDB數據的每次更改的記錄。
當InnoDB 啟動時,它將檢查並執行數據文件和事務日誌。
將已提交的事務日誌條目應用於數據文件,並對已修改數據但未提交的所有事務執行撤消(undo)操作。
Percona XtraBackup的工作方式是在啟動時記住事務日誌序列號(LSN),然後複製數據文件。
如果文件正在更改,則它們會在不同的時間點反映資料庫的狀態。
同時,Percona XtraBackup運行一個後臺進程監視事務日誌文件,並從中複製更改的數據。
如果伺服器提供了備份鎖(如:Percona Server for MySQL 5.6+)的特性,Percona XtraBackup將使用備份鎖(Percona Server for MySQL 5.6+中提供了此功能)替代FLUSH TABLES WITH READ LOCK(FTWRL全局讀鎖)。
Percona XtraBackup使用備份鎖自動複製非InnoDB數據,以避免阻止修改InnoDB表的DML(數據操縱語言)查詢。
當伺服器支持備份鎖時,xtrabackup將首先複製InnoDB數據,運行 LOCK TABLES FOR BACKUP(備份鎖)並複製MyISAM表和文件。
完成上一步的此操作後,然後進行InnoDB文件備份(.frm,.MRG,.MYD,.MYI,.TRG,.TRN, .ARM,.ARZ,.CSM,.CSV,.par和 .opt等格式文件)。
然後xtrabackup將使用LOCK BINLOG FOR BACKUP(binlog-lock的共享鎖)阻止可能發生變化的二進位日誌位置(或者通過SHOW MASTER/SLAVE STATUS獲取Exec_Master_Log_Pos操作 或者Exec_Gtid_Set操作)。
然後,xtrabackup將完成REDO日誌文件的複製,並獲取二進位日誌坐標。
完成上述操作後,xtrabackup`將解鎖二進位日誌和表。
Exec_Master_Log_Pos記錄的是SQL thread執行到master binlog的文件和位置
GTID即全局事務ID
最後,通過STDERR(標準輸出)將二進位日誌位置進行輸出,如果一切正常xtrabackup 將退出並返回0。
xtrabackup工具支持增量備份,可以在每個完整備份之間執行許多增量備份,
可以選擇按需要配置備份間隔,例如每周一次完整備份和每天增量備份,或者每天完整備份和每小時增量備份。
增量備份的原理是基於InnoDB頁面的日誌序列號或LSN(事務日誌序列號)。
LSN是整個資料庫系統的版本號。每個頁面的LSN都包含了最近的更改時間。
增量備份複製相較於先前的增量或完全備份的LSN之後更新的每個頁面。
有兩種算法用於查找要複製的此類頁面集。
第一個通過讀取所有數據頁直接檢查LSN頁,該方式可用於所有伺服器類型和版本。
Percona Server for MySQL提供的第二個方式,通過啟用已更改的頁面跟蹤功能,在更改頁面時記錄下來。然後將這些信息寫在一個位圖文件中。
xtrabackup使用位圖文件來讀取增量備份所需的數據頁。
如果xtrabackup找到位圖文件,則默認情況下啟用後一種算法。
即使位圖數據可用,也可以通過變量(xtrabackup --incremental-force-scan)指定掃描所有頁面。
xtrabackup可以通過使用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的表和索引,最後是日誌文件。
在複製文件時,它將保留文件的屬性,因為它們由創建備份的用戶擁有,所以可能需要在啟動資料庫之前將文件的所有權更改mysql,。
使用xtrabackup --move-back選項還原備份,類似於xtrabackup --copy-back, 唯一的區別在於,它不是複製文件,而是將文件移動到目標位置。
由於xtrabackup --move-back將刪除備份文件,因此必須謹慎使用。
在沒有足夠的可用磁碟空間來容納數據文件及其備份副本的情況下,此選項很有用。