![[译] Percona XtraBackup 示例](https://oss-emcsprod-public.modb.pro/image/editor/20240307-279ad8cc-b226-4c9a-9a00-cef7bba3ca97.jpg)
[译] Percona XtraBackup 示例

原文链接: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 建立和恢复增量备份。
本文将使用“$”表示操作系统终端中的命令,并使用“>”表示MySQL客户端命令行中的任何命令。
权限
执行 Percona XtraBackup 所需的权限可以很容易地在 Percona网站 上找到,如下所示(在这个例子中,所有的操作系统权限都使用了root权限):
# | 权限列表 | 示例 | 权限使用示例 |
---|---|---|---|
操作系统 | MySQL数据文件夹的文件系统级权限: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 所需的最小权限。注意:$
用于表示操作系统命令行,而>
用于表示MySQL客户端命令行。
备份
全量备份:
增量备份必须先从一个全量备份开始。命令如此:$xtrabackup --backup --user=bkupusr --password --target-dir=/home/user/fullBackupDestination
,这里target-dir
是全备的目标文件夹,在这个示例中,目标文件夹是/home/bkupusr/xtra/full
。如果目标文件夹不存在,将会被创建。(如图2和图3)

图1: 使用 Percona XtraBackup 完成全备。注意,这个例子没有使用--user
或--password
选项,因为已经使用mysql_config_editor程序设置了login-path
。
图1显示了正在进行的全备,但是没有--user
或--password
选项,因为登录凭证是使用$mysql_config_editor
设置的。关于这个主题的教程可以在这里找到: https://www.virtual-dba.com/blog/how-to-use-mysql-config-editor/

图2:当目标文件夹不存在时进行备份

图3:指定的目标文件夹被新建
增量备份:
在建立了初始的全备之后,接下来是增备。增备的命令与全备的命令非常相似,但是需要一个额外的目录。现在,target-dir
将是新的增量文件存放的地方,选项--incremental-basedir
是最近进行备份(在本例中是全备份)的位置; 图4展示了一个全备后的第一次增备。

对于下一个增量备份,命令是相同的,但是现在target-dir将指定为下一个增备的位置,而incremental-basedir将指向最近的增备,如图5所示。

现在,存在三个备份(图6-8):一个全备和两个增备。

图6:包含全量备份的目录

图7:包含第一次增备的目录

图8:包含第二次增备的目录
对于额外的增备,继续以这种方式,将之前的target-dir
移动到当前的incremental-basedir
。
恢复
最后一步是还原备份。在实际执行恢复之前有一些设置:
- MySQL 服务必须停止。
- MySQL 数据目录必须为空。

图9:恢复准备步骤1 – 停止mysql服务

图10:恢复准备步骤2 – 清空MySQL数据目录
-
首先准备备份:
$xtrabackup --prepare --target-dir=/home/usr/full_bkup_directory
- 注意
--prepare
选项
- 注意
-
全量备份恢复到空数据路径:
$xtrabackup --copy-back --target-dir=/home/usr/full_bkup_directory
--copy-back
是恢复的命令
-
必须检查或设定新的恢复备份集的权限:
$chown mysql:mysql mysql
- 这将递归应用到数据目录的所有文件
-
恢复MySQL服务:
$service mysql start




对于增备设定和copy-back的步骤是一样的,但是准备步骤不同;出最后一个增备外,需要在语句中增加参数–-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



同样的,复制回步骤将与全量备份一样,使用唯一的准备好的全备。在复制回步骤完成后,恢复完成。
译者注
考虑到兼容性问题,在使用 PXB 时需要注意 MySQL 的版本,如果使用的是 MariaDB,则建议使用 mariabackup。
- Title: [译] Percona XtraBackup 示例
- Author: 严少安
- Created at: 2022-04-07 13:04:50
- Updated at: 2022-04-07 13:04:50
- Link: https://shawnyan.cn/2022/mysql/fanyi-percona-xtrabackup-example/
- License: This work is licensed under CC BY-NC-SA 4.0.