mysql 開發進階篇系列 44 物理備份與恢復( 熱備份xtrabackup 工具介紹)
一.概述
物理備份和恢復又分為冷備份和熱備份。與邏輯備份相比,它最大優點是備份和恢復的速度更快。因為物理備份的原理都是基於檔案的cp。
1.1 冷備份 冷備份就是停掉資料庫服務。這種物理備份一般很少使用,因為很多應用是不允許長時間停機的。恢復操作大概是:首先停掉mysql服務, 在作業系統級別恢復mysql的資料檔案,然後重啟mysql服務, 使用mysqlbinlog工具恢復自備份以來的所有binlog。估計這種方法跟sql server的分離附加庫類似。由於會停機,冷備份就不在深入。
1.2 熱備份 對於熱備份有很多方法,本質其實就是將要備份的表加讀鎖,然後再cp資料檔案到備份目錄。對於熱備份有很多第三方工具。使用最為廣泛的好像是 xtrabackup 工具,該工具是用來備份mysql資料庫的開源工具。
二. precona xtrabackup 介紹
下面翻譯來自官方文件 2.4版本,有些地方翻譯後不是很懂,在後面繼續學習xtrabackup中,一邊實戰一邊理解,在回頭把該介紹文件修正。
2.1 xtrabackup介紹
Percona XtraBackup是一個開源的MySQL伺服器熱備份工具,在備份期間不會鎖定資料庫。是一個編譯好的C二進位制檔案,提供了用MyISAM、InnoDB和XtraDB表備份整個MySQL資料庫例項的功能。現是最新版本是2.4,目前只支援在linux系統上。
它可以在MySQL 5.1、5.5、5.6和5.7伺服器上備份InnoDB、XtraDB和MyISAM表的資料,也可以用XtraDB備份Percona伺服器的資料。
無論是24x7高負載的伺服器還是低事務量的環境,Percona XtraBackup的設計目的是使備份成為一個無縫的過程,而不會破壞生產環境中伺服器的效能。
2.2 支援的備份型別
(1)增量備份
(2)部分備份
(3)緊湊的備份
2.3 高階特徵 (1)使用xtrabackup指令碼備份
(2)統計分析表
(3)處理二進位制日誌
(4)恢復單個表
(5)LRU轉儲備份
2.4 XtraBackup備份功能
下面介紹下XtraBackup工具的主要特徵,功能中講到的Drizzle、MariaDB
Supported MySQL flavors |
支援mysql分支型別 MySQL, PerconaServer, MariaDB, Percona XtraDB Cluster, MariaDB Galera Cluster |
Supported operating systems |
支援的作業系統: linux |
Non-blocking InnoDB backups |
非阻塞InnoDB備份。在複製非InnoDB資料時,InnoDB表仍然是鎖定的。 |
Blocking MyISAM backups |
阻塞MyISAM備份 |
Incremental backups |
增量備份 |
Full compressed backups |
完全壓縮備份 |
Incremental compressed backups |
增量壓縮備份 |
Fast incremental backups |
快速增量備份。 Percona伺服器支援快速增量備份,支援XtraDB更改頁面跟蹤 |
Incremental backups with archived logs feature in Percona Server |
Percona伺服器裡帶有歸檔日誌特性的增量備份 |
Incremental backups with REDO log only |
僅使用重做日誌的增量備份 |
Backup locks |
備份鎖是Percona Server 5.6+中具有讀鎖的表的輕量級替代方法。Percona XtraBackup自動使用它們複製非InnoDB資料,以避免阻塞修改InnoDB表的DML查詢。 |
Encrypted backups |
加密備份 |
Streaming backups |
流備份 |
Parallel local backups |
並行的本地備份 |
Parallel compression |
並行壓縮 |
Parallel encryption |
並行加密 |
Parallel apply-log |
並行apply-log |
Parallel copy-back |
並行copy-back |
Partial backups |
部分備份 |
Partial backups of individual partitions |
部分的備份分割槽 |
Point-in-time recovery support |
時間點恢復支援 |
Safe slave backups |
安全的從庫備份 |
Compact backups |
緊湊備份。Percona XtraBackup在準備緊湊備份時跳過二級索引頁並重新建立它們。MySQL企業備份跳過未使用的頁面並重新插入到準備階段。 |
Buffer pool state backups |
緩衝池狀態備份 |
Individual tables export |
表匯出 |
Individual partitions export |
分割槽匯出 |
Restoring tables to a different server |
將表還原到另一臺伺服器。使用Percona XtraBackup匯出的表可以匯入Percona Server 5.1、5.5或5.6+或MySQL 5.6+。使用MySQL企業備份建立的可傳輸表空間只能匯入Percona Server 5.6+、MySQL 5.6+或MariaDB 10.0+。 |
Data & index file statistics |
資料和索引檔案統計 |
InnoDB secondary indexes defragmentation |
InnoDB二級索引整理 |
support to minimize lock time |
支援最小化鎖的時間 |
Backup history table |
備份歷史表 |
External graphical user interfaces to backup/recovery |
用於備份/恢復的外部圖形使用者介面 |
2.5 備份工作原理 Percona XtraBackup基於InnoDB的崩潰恢復功能, 它會複製InnoDB資料檔案,這會導致內部不一致的資料, 然後,它對檔案執行崩潰恢復,使它們再次成為一致的、可用的資料庫。
它的工作是因為InnoDB維護一個重做日誌,也稱為事務日誌。這包含對InnoDB資料的每次更改的記錄。當InnoDB啟動時,它檢查資料檔案和事務日誌,並執行兩個步驟。它將提交的事務日誌條目應用於資料檔案,並對任何修改了資料但沒有提交的事務執行撤銷操作。
Percona XtraBackup的工作原理是在日誌序列號(LSN)啟動時記住它,然後複製資料檔案。這樣做需要一些時間,所以如果檔案正在更改,那麼它們就會在不同的時間點反映資料庫的狀態。同時,Percona XtraBackup執行一個後臺程序來監視事務日誌檔案,並從中複製更改。Percona XtraBackup需要不斷地這樣做,因為事務日誌是以迴圈方式編寫的,並且可以在一段時間後重用。自從Percona XtraBackup開始執行以來,對資料檔案的每次更改都需要事務日誌記錄。
Percona XtraBackup將使用備份鎖作為具有讀鎖的表的輕量級替代。這個特性在Percona Server 5.6+中可用。Percona XtraBackup自動使用此功能複製非InnoDB資料,以避免阻塞修改InnoDB表的DML查詢。當伺服器支援備份鎖時,xtrabackup首先複製InnoDB資料,執行鎖表進行備份,然後複製MyISAM表和.frm檔案。一旦完成,檔案的備份將開始。它將備份.frm, . mrg, . myd, . myi, . trg, . trn, . arm, . arz, . csm, . csv, .par和.opt檔案。
在此之後,xtrabackup將使用LOCK BINLOG進行備份,以阻止顯示主/從狀態所報告的所有可能更改二進位制日誌位置或Exec_Master_Log_Pos或Exec_Gtid_Set(即與複製從庫上的當前SQL執行緒狀態對應的主庫二進位制日誌座標)的操作。然後xtrabackup將完成重做日誌檔案的複製,並獲取二進位制日誌座標。完成此操作後,xtrabackup將解鎖二進位制日誌和表。
最後,將二進位制日誌位置列印到STDERR,如果一切正常,xtrabackup將退出返回0
注意,xtrabackup的STDERR沒有寫在任何檔案中。您必須將其重定向到一個檔案,例如,xtrabackup 選項2> backupout.log。
它還將在備份目錄中建立以下檔案:
在準備階段,Percona XtraBackup使用複製的事務日誌檔案對複製的資料檔案執行崩潰恢復。完成之後,資料庫就可以恢復和使用了。
備份後的MyISAM表和InnoDB表最終會保持一致,因為在準備(恢復)過程之後,InnoDB的資料會向前滾到備份完成的地方,而不是回滾到備份開始的地方。這個時間點與具有讀鎖的flush tables表匹配,因此MyISAM資料和準備好的InnoDB資料是同步的。
xtrabackup和innobackupex工具都提供了前面解釋中沒有提到的許多特性。每個工具的功能在手冊中有更詳細的說明。簡單地說,這些工具允許您使用各種組合的資料檔案複製、日誌檔案複製和對資料應用日誌來執行流備份和增量備份等操作。
2.6 恢復還原工作
要使用xtrabackup恢復備份,您可以使用xtrabackup—copy-back或xtrabackup—move選項。
Xtrabackup將從my.cnf中讀取datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir變數,並檢查目錄是否存在。
它將首先複製MyISAM表、索引等(.frm、. mrg、. myd、. myi、. trg、. trn、. arm、. arz、. csm、. csv、par和.opt檔案),然後複製InnoDB表和索引,最後複製日誌檔案。它將保留檔案的屬性,當複製它們時,您可能不得不在啟動資料庫伺服器之前,將檔案的所有權更改為mysql使用者,因為它們將屬於建立備份的使用者。
可以使用xtrabackup—move-back選項恢復備份。這個選項類似於xtrabackup——copy-back,唯一的區別是它將檔案移動到目標位置,而不是複製檔案。由於此選項刪除了備份檔案,因此必須謹慎使用。當沒有足夠的空閒磁碟空間來容納資料檔案和它們的備份副本時,它非常有用。