原文鏈接:https://www.virtual-dba.com/blog/percona-xtrabackup-example/
原文作者:Steve Champion

在這個示例中,將使用如下軟件版本:
- Ubuntu v20.04.3
- MySQL server v5.7.35
- Percona XtraBackup v2.4.24
需要重點注意的是 Percona XtraBackup 8.0 的引入是為了在 MySQL 8.0 版本上使用,與 MySQL 5.7 版本不兼容。在寫本文時,不存在與 MySQL 的最新版本(8.0.28)兼容的 Percona XtraBackup 版本。詳情請參閱https://www.percona.com/doc/percona-xtrabackup/8.0/index.html。
本文將逐步展示在 MySQL 5.7 上使用 Percona XtraBackup 建立和恢復增量備份。
本文將使用“$”表示操作系統(tǒng)終端中的命令,并使用“>”表示MySQL客戶端命令行中的任何命令。
權(quán)限
執(zhí)行 Percona XtraBackup 所需的權(quán)限可以很容易地在Percona網(wǎng)站上找到,如下所示(在這個例子中,所有的操作系統(tǒng)權(quán)限都使用了root權(quán)限):
| 權(quán)限列表 | 示例 | 權(quán)限使用示例 | |
|---|---|---|---|
| 操作系統(tǒng) | MySQL數(shù)據(jù)文件夾的文件系統(tǒng)級權(quán)限:READ, WRITE, EXECUTE | $sudo xtrabackup | $sudo -i |
| MySQL | RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, PROCESS, SUPER | >GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON . TO ‘user’@’localhost’; | >GRANT ALL ON . TO ‘user’@’localhost’;(root user) |
表1: Percona XtraBackup 所需的最小權(quán)限。注意:$用于表示操作系統(tǒng)命令行,而>用于表示MySQL客戶端命令行。
備份
全量備份:
增量備份必須先從一個全量備份開始。命令如此:$xtrabackup --backup --user=bkupusr --password --target-dir=/home/user/fullBackupDestination,這里target-dir是全備的目標文件夾,在這個示例中,目標文件夾是/home/bkupusr/xtra/full。如果目標文件夾不存在,將會被創(chuàng)建。(如圖2和圖3)

圖1:使用 Percona XtraBackup 完成全備。注意,這個例子沒有使用--user或--password選項,因為已經(jīng)使用mysql_config_editor程序設(shè)置了login-path。
圖1顯示了正在進行的全備,但是沒有--user或--password選項,因為登錄憑證是使用$mysql_config_editor設(shè)置的。關(guān)于這個主題的教程可以在這里找到: https://www.virtual-dba.com/blog/how-to-use-mysql-config-editor/

圖2:當目標文件夾不存在時進行備份

圖3:指定的目標文件夾被新建
增量備份:
在建立了初始的全備之后,接下來是增備。增備的命令與全備的命令非常相似,但是需要一個額外的目錄。現(xiàn)在,target-dir將是新的增量文件存放的地方,選項--incremental-basedir是最近進行備份(在本例中是全備份)的位置; 圖4展示了一個全備后的第一次增備。

圖4: 第一個增量備份。使用incremental-basedir作為全備,并將target-dir選為新的目標來存儲增備。
對于下一個增量備份,命令是相同的,但是現(xiàn)在target-dir將指定為下一個增備的位置,而incremental-basedir將指向最近的增備,如圖5所示。

圖5: 第二次增備,使用第一次增備作為incremental-basedir。
現(xiàn)在,存在三個備份(圖6-8):一個全備和兩個增備。

圖6:包含全量備份的目錄

圖7:包含第一次增備的目錄

圖8:包含第二次增備的目錄
對于額外的增備,繼續(xù)以這種方式,將之前的target-dir移動到當前的incremental-basedir。
恢復
最后一步是還原備份。在實際執(zhí)行恢復之前有一些設(shè)置:
- MySQL 服務必須停止。
- MySQL 數(shù)據(jù)目錄必須為空。

圖9:恢復準備步驟1 – 停止mysql服務

圖10:恢復準備步驟2 – 清空MySQL數(shù)據(jù)目錄
-
首先準備備份:
$xtrabackup --prepare --target-dir=/home/usr/full_bkup_directory- 注意
--prepare選項
- 注意
-
全量備份恢復到空數(shù)據(jù)路徑:
$xtrabackup --copy-back --target-dir=/home/usr/full_bkup_directory--copy-back是恢復的命令
-
必須檢查或設(shè)定新的恢復備份集的權(quán)限:
$chown mysql:mysql mysql- 這將遞歸應用到數(shù)據(jù)目錄的所有文件
-
恢復MySQL服務:
$service mysql start

圖11: 準備恢復全量備份

圖12: 實際恢復完全備份

圖13:恢復后變更權(quán)限

圖14:恢復MySQL服務
對于增備設(shè)定和copy-back的步驟是一樣的,但是準備步驟不同;出最后一個增備外,需要在語句中增加參數(shù)–-apply-log-only和--prepare。
增備的準備步驟如下:
-
準備全備:
$xtrabackup --prepare --apply-log-only --target-dir=/data/backups/full -
向全備應用第一個增備:
$xtrabackup --prepare --apply-log-only --target-dir=/data/backups/full --incremental-dir=/data/backups/inc1 -
向全備應用第二個增備:
$xtrabackup --prepare --apply-log-only --target-dir=/data/backups/full --incremental-dir=/data/backups/inc2

圖15:為恢復增備準備全備

圖16:為恢復準備第一個增備

圖17:為恢復準備第二個增備
同樣的,復制回步驟將與全量備份一樣,使用唯一的準備好的全備。在復制回步驟完成后,恢復完成。
譯者注:
考慮到兼容性問題,在使用PXB時需要注意MySQL的版本,如果使用的是MariaDB,則建議使用mariabackup。




