作者 | 吴守阳
审校 | 重楼
介绍
Percona XtraBackup 是一款开源的备份工具,专为 MySQL 及其分支(如 Percona Server 和 MariaDB)数据库设计。它允许在不中断数据库操作的情况下执行热备份,确保数据的一致性和可恢复性。Percona XtraBackup 是该工具的最新版本,带来了若干改进和新功能。
工作原理
1. 基本原理
重做日志(Redo Log):
- 重做日志 是 InnoDB 用于记录每一个数据更改的日志文件。即使在崩溃的情况下,重做日志也可以帮助恢复数据的一致性。
- InnoDB 启动时会检查数据文件和重做日志,并执行两个步骤:
(1)应用已提交的事务:将已提交的事务日志条目应用到数据文件,使其最新。
(2)撤销未提交的事务:撤销任何已修改但未提交的数据,以确保数据一致性。
2. 备份过程
启动备份:
- XtraBackup 启动时会记录当前的 LSN(Log Sequence Number,日志序列号),这是数据库在该时间点的快照。
复制数据文件:
- XtraBackup 开始复制 InnoDB 数据文件。由于数据文件在备份期间可能发生更改,因此它们可能会反映不同时间点的数据状态。
复制重做日志:
- XtraBackup 在后台运行一个进程,监视并复制重做日志中的更改。这是为了确保所有从备份开始到结束的更改都被捕捉到。
- 重做日志以循环方式写入,当日志空间用完时会重用,因此 XtraBackup 需要持续监视日志,以防遗漏任何更改。
3. 恢复过程
应用重做日志:
- 备份完成后,XtraBackup 会执行“准备”阶段,即将重做日志中的所有更改应用到数据文件。这一步类似于 InnoDB 的崩溃恢复过程。
- 通过应用重做日志,确保数据文件在恢复时的一致性和完整性。
4. 使用备份锁
备份锁:
- XtraBackup 利用 MySQL 8.0 中引入的备份锁 LOCK INSTANCE FOR BACKUP 和LOCK BINLOG FOR BACKUP,这些锁在备份过程中可以避免长时间的表锁定。
- 当备份锁不可用时,XtraBackup 使用 FLUSH TABLES WITH READ LOCK 锁定 MyISAM 和其他非 InnoDB 表,但只在最后阶段短时间内进行锁定,以避免对 DML 操作的影响。
5. 增量备份
增量备份:
- 增量备份基于上一次备份的 LSN,仅备份从那时起发生的更改。这样可以减少备份时间和存储空间。
- 增量备份完成后,可以与基础备份和之前的增量备份合并,通过应用重做日志来恢复完整数据。
6. 具体步骤
1)记录 LSN:启动备份时记录当前 LSN。
2)复制数据文件:开始复制数据文件。
3)复制重做日志:持续监视和复制重做日志中的更改。
4)结束时的操作:
- 如果需要锁定 MyISAM 表,XtraBackup 会在最后阶段短时间内锁定这些表,避免长时间阻塞。
- 备份完成后,XtraBackup 将重做日志中的更改应用到数据文件,确保数据一致性。
7. 恢复
1)恢复数据文件:使用--copy-back 或--move-back 选项将备份数据恢复到目标目录。
2)应用重做日志:在准备阶段,XtraBackup 将重做日志中的所有更改应用到数据文件,确保数据库的一致性。
3)启动数据库:恢复完成后,可以启动数据库并正常使用。
优点
- 无停机备份:支持在线备份,无需停止数据库服务。
- 高性能:备份过程中对数据库性能影响最小。
- 增量备份:支持增量备份,减少存储空间和备份时间。
- 数据一致性:保证备份期间数据的一致性。
- 恢复灵活:支持部分恢复和时间点恢复。
- 速度快:恢复时间更快,正常运行时间更长。
- 资源限制:控制IO、线程、内存等资源限制。
缺点
- 学习曲线:对于新手来说,配置和使用可能需要一定的学习时间。
- 复杂环境支持:在某些复杂环境中(如多源复制或非常大的数据库),配置和使用可能较为复杂。
- 硬件需求:增量备份和还原可能需要更多的硬件资源(如磁盘和内存)。
版本限制
- XtraBackup 2.4:适用于 MySQL 5.6 和 5.7 及相应版本的 Percona Server 和 MariaDB。
- XtraBackup 8.0:适用于 MySQL 8.0 及相应版本的 Percona Server。
- XtraBackup 8.3:主要用于 MySQL 8.3及相应版本的 Percona Server。
使用场景
- 高可用环境:需要在不影响数据库运行的情况下进行备份。
- 大型数据库:适合处理大型数据库的备份需求。
- 数据恢复:提供可靠的数据恢复解决方案,包括部分恢复和时间点恢复。
- 增量备份需求:需要定期进行增量备份以节省存储空间和备份时间。
安装步骤
Percona-XtraBackup-8.3.0
1、下载rpm包
wget
2、安装
Shell > yum install epel-release
Shell > yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm sudo
Shell > percona-release setup ps80
Shell > yum install openssl-libs libev libgcrypt procps-ng perl-DBD-MySQL zstd
Shell > rpm -ivh percona-xtrabackup-83-8.3.0-1.1.el8.x86_64.rpm
Percona-XtraBackup-8.0.35
Shell > yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Shell > percona-release enable-only tools
Shell > yum install openssl-libs libev libgcrypt procps-ng perl-DBD-MySQL zstd
Shell > yum install percona-xtrabackup-80
账户授权
CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY 's3cr%T';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost';
GRANT SELECT ON performance_schema.log_status TO 'xtrabackup'@'localhost';
GRANT SELECT ON performance_schema.keyring_component_status TO xtrabackup@'localhost';
GRANT SELECT ON performance_schema.replication_group_members TO xtrabackup@'localhost';
FLUSH PRIVILEGES;
备份示例
流式全量备份
- 流式全量备份到远程主机,不在本机落盘
xtrabackup --defaults-file=/etc/my.cnf --port=3306 --user=xtrabackup --host=10.20.20.20 --password='*****sel' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --tmpdir=/tmp --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup > /jesong/xtrabackup/backup-image_`date +"%F_%H_%M_%S"`
- 流式全量备份到远程主机,不在本机落盘
xtrabackup --defaults-file=/etc/my.cnf --port=3306 --user=xtrabackup --host=10.20.20.20 --password='*****sel' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup > /jesong/xtrabackup/backup-image_`date +"%F_%H_%M_%S"` | sshpass -p 'Tisdfsdfsdfdsfdsfds' ssh -p 22 root@10.20.20.20 "cat - > /jesong/backup.xbstream"
- 镜像抽取
xbstream -x < /jesong/xtrabackup/backup-image -C /jesong/xtrabackup/xbstream-dir/
- 解压
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 应用日志:
xtrabackup --prepare --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 恢复
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/xbstream-dir/
压缩全量备份
- 全量备份本地压缩
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --target-dir=/jesong/xtrabackup/backup-image_`date +"%F_%H_%M_%S"`
- 解压
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/backup-image_2024-05-30_17_56_25/
- 应用日志
xtrabackup --prepare --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/backup-image_2024-05-30_17_56_25/
- 恢复
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/xbstream-dir/
增量备份
- 流式全量备份
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --extra-lsndir=/jesong/xtrabackup/full > /jesong/xtrabackup/full/backup-image
- 增量
1xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --extra-lsndir=/jesong/xtrabackup/incremental_1 --incremental-basedir=/jesong/xtrabackup/full > /jesong/xtrabackup/incremental_1/backup-image
- 增量
2xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --compress --compress-threads=4 --parallel=4 --throttle=300 --stream=xbstream --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --extra-lsndir=/jesong/xtrabackup/incremental_2 --incremental-basedir=/jesong/xtrabackup/incremental_1 > /jesong/xtrabackup/incremental_2/backup-image
- 镜像抽取全量
xbstream -x < /jesong/xtrabackup/full/backup-image -C /jesong/xtrabackup/xbstream-dir/
- 增量
1xbstream -x < /jesong/xtrabackup/incremental_1/backup-image -C /jesong/xtrabackup/incremental_1_work
- 增量
2xbstream -x < /jesong/xtrabackup/incremental_2/backup-image -C /jesong/xtrabackup/incremental_2_work
解压
- 全量
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 增量
1xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/incremental_1_work
- 增量
2xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/incremental_2_work
应用日志:--apply-log-only在合并增量备份时应使用,但最后一个备份除外。
- 全量
xtrabackup --prepare --apply-log-only --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/xbstream-dir/
- 增量
1xtrabackup --prepare --apply-log-only --parallel=4 --use-memory=200MB --incremental-dir=/jesong/xtrabackup/incremental_1_work --target-dir=/jesong/xtrabackup/xbstream-dir/
- 增量
2xtrabackup --prepare --parallel=4 --use-memory=200MB --incremental-dir=/jesong/xtrabackup/incremental_2_work --target-dir=/jesong/xtrabackup/xbstream-dir/
- 恢复
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/xbstream-dir/
为什么最后一步不使用--apply-log-only
- 执行回滚:在应用最后一个增量备份时不使用--apply-log-only,这样会执行回滚操作,将未提交的事务回滚,使得备份数据变得一致。
- 备份一致性:即使在最后一步使用了--apply-log-only,备份仍然是一致的,但在恢复后数据库服务器会在启动时执行回滚操作。这可能会增加恢复时间,因此推荐在备份准备阶段完成回滚。
部分备份
- 指定表或以什么开头都会备份
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --datadir=/jesong/mysql --target-dir=/jesong/xtrabackup/test --tables="^tolldb[.]tc_deduction_plan"
- 库里的表
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --datadir=/jesong/mysql --target-dir=/jesong/xtrabackup/test --tables="^tolldb[.].*"
- 文件方式导入
echo "mydatabase.mytable" > /tmp/tables.txt
xtrabackup --defaults-file=/etc/my.cnf --slave-info --port=3306 --user=xtrabackup --host=196.168.10.10 --password='*******' --parallel=4 --throttle=300 --use-memory=200MB --ftwrl-wait-timeout=120 --kill-long-queries-timeout=60 --kill-long-query-type=all --no-server-version-check --backup --datadir=/jesong/mysql --target-dir=/jesong/xtrabackup/test --tables-file=/tmp/tables.txt
- 应用日志
xtrabackup --prepare --export --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/test
恢复方案一:需要清空数据目录
xtrabackup --copy-back --target-dir=/jesong/xtrabackup/test
恢复方案二:拷贝数据文件
要从备份中恢复分区,必须丢弃表空间的该表:
ALTER TABLE name_p4 DISCARD TABLESPACE;
下一步是将文件从备份复制到MySQL数据目录:.ibd
cp /mnt/backup/2012-08-28_10-29-09/imdb/name#P#p4.ibd /var/lib/mysql/imdb/name_p4.ibd
最后一步是导入表空间:
ALTER TABLE name_p4 IMPORT TABLESPACE;
相关参数
- --print-defaults 打印程序参数列表并退出。
- --no-defaults 不从任何选项文件中读取默认选项,除了登录文件。
- --defaults-file=# 只从指定的文件 # 读取默认选项。
- --defaults-extra-file=# 在读取全局文件后读取此文件。
- --defaults-group-suffix=# 还读取与 concat(group, suffix) 结合的组。
- --login-path=# 从登录文件中读取此路径。
- --no-login-paths 不从登录路径文件中读取登录路径。
- -v, --version 打印 xtrabackup 版本信息。
- --target-dir=name 目标目录。
- --backup 将备份存储到 target-dir。
- --prepare 准备一个备份以在备份的 MySQL 服务器上启动。
- --export 在准备时创建文件以导入到另一个数据库。
- --apply-log-only 在准备阶段应用日志后停止恢复过程,不继续推进 LSN。
- --print-param 打印 mysqld 需要的参数及其当前值。
- --use-memory=# 使用此值代替 buffer_pool_size。
- --use-free-memory-pct=# 此选项指定在准备阶段缓冲池使用的空闲内存百分比(默认是 0% - 禁用)。
- --estimate-memory 启用/禁用估算准备备份所需的内存。估算在备份期间进行。(默认关闭)
- --throttle=# 限制每秒 IO 操作(读写对)的数量,用于 --backup。
- --log[=name] 为兼容 MySQL 选项而忽略的选项。
- --log-copy-interval=# 日志复制线程之间检查的时间间隔(以毫秒为单位,默认是 1 秒)。
- --extra-lsndir=name (用于 --backup):在此目录中保存 xtrabackup_checkpoints 文件的额外副本。
- --incremental-lsn=name (用于 --backup):仅复制比指定 LSN 'high:low' 更新的 .ibd 页面。
- --incremental-basedir=name (用于 --backup):仅复制比指定目录中的备份更新的 .ibd 页面。
- --redo-log-arch-dir=name 设置重做日志存档目标目录(如果服务器尚未设置)。
- --incremental-dir=name (用于 --prepare):应用增量目录中的 .delta 文件和日志文件。
- --to-archived-lsn=# 不应用具有较大日志序列号的存档日志。
- --tables=name 使用表名的正则表达式进行过滤。
- --tables-file=name 通过文件中的确切数据库表名列表进行过滤。
- --databases=name 通过数据库列表进行过滤。
- --databases-file=name 通过文件中的数据库列表进行过滤。
- --tables-exclude=name 使用表名的正则表达式进行过滤,并排除匹配的名称。
- --databases-exclude=name 基于名称排除数据库,并排除匹配的名称。
- --create-ib-logfile **当前不起作用** 创建 ib_logfile* 文件用于 '--prepare'。
- --stream[=name] 使用 xbstream 格式流传输所有备份文件。
- --compress[=name] 使用指定的压缩算法压缩单个备份文件。支持的算法有 'lz4' 和 'zstd'。默认算法是 'zstd'。
- --compress-threads=# 并行数据压缩的线程数。默认值为 1。
- --compress-chunk-size=# 压缩线程的工作缓冲区大小(以字节为单位)。默认值为 64K。
- --compress-zstd-level=# Zstandard 压缩级别,从 1 到 19。默认值为 1。
- --encrypt=name 使用指定的加密算法加密单个备份文件。
- --encrypt-key=name 使用的加密密钥。
- --encrypt-key-file=name 包含加密密钥的文件。
- --encrypt-threads=# 并行数据加密的线程数。默认值为 1。
- --encrypt-chunk-size=# 加密线程的工作缓冲区大小(以字节为单位)。默认值为 64K。
- --rebuild-threads=# 使用此线程数重建紧凑备份中的索引。仅在 --prepare 和 --rebuild-indexes 选项下有效。
- --incremental-force-scan 即使服务器启用了页面跟踪,也执行全扫描增量备份。
- --close-files 不保持文件打开。请自行承担风险。
- --core-file 在致命信号时写入核心文件。
- --copy-back 将先前制作的备份中的所有文件从备份目录复制到其原始位置。
- --move-back 将先前制作的备份中的所有文件从备份目录移动到实际的数据目录位置。请谨慎使用,因为这会删除备份文件。
- --galera-info 创建 xtrabackup_galera_info 文件,包含备份时本地节点的状态。
- --slave-info 备份复制从服务器时打印主服务器的二进制日志位置和名称。
- --page-tracking 使用服务器的页面跟踪功能进行增量备份。
- --no-lock 禁用锁定 DDL 和表锁定。
- --lock-ddl 在备份开始时锁定表/实例以阻止所有 DDL 操作。
- --lock-ddl-timeout=# 如果在给定超时时间内 LOCK TABLES FOR BACKUP 未返回,则中止备份。
- --lock-ddl-per-table 在 xtrabackup 开始复制阶段之前为每个表锁定 DDL,直到备份完成。
- --backup-lock-timeout=# 获取元数据锁的尝试超时时间(以秒为单位)。
- --backup-lock-retry-count=# 获取元数据锁的尝试次数。
- --dump-innodb-buffer-pool 通过设置 innodb_buffer_pool_dump_now=ON 指示 MySQL 服务器转储 innodb 缓冲池。
- --dump-innodb-buffer-pool-timeout=# 指定 xtrabackup 等待 innodb 缓冲池转储完成的秒数。
- --dump-innodb-buffer-pool-pct=# 指定要转储的缓冲池的百分比。
- --safe-slave-backup 在备份开始时停止从服务器 SQL 线程,直到没有打开的临时表为止。
- --rsync 使用 rsync 实用程序优化本地文件传输。
- --force-non-empty-directories 在 --copy-back 或 --move-back 传输文件到非空目录时指定此选项。
- --no-server-version-check 允许在服务器版本高于 PXB 支持的版本时继续备份。
- --no-version-check 禁用版本检查。
- --tables-compatibility-check 启用引擎兼容性警告。
- --no-backup-locks 控制是否在备份阶段使用备份锁,而不是 FLUSH TABLES WITH READ LOCK。
- --rollback-prepared-trx 强制回滚准备的 InnoDB 事务。
- --decompress 解压缩使用 --compress 选项压缩的所有文件。
- -u, --user=name 指定连接到服务器时使用的 MySQL 用户名。
- -H, --host=name 指定使用 TCP/IP 连接到数据库服务器时的主机。
- -P, --port=# 指定使用 TCP/IP 连接到数据库服务器时的端口。
- -p, --password[=name] 指定连接到数据库时使用的密码。
- -S, --socket=name 指定使用 UNIX 域套接字连接到本地数据库服务器时的套接字。
- --incremental-history-name=name 指定存储在 PERCONA_SCHEMA.xtrabackup_history 历史记录中的备份系列的名称,以此为基础进行增量备份。
- --incremental-history-uuid=name 指定特定历史记录的UUID,存储在PERCONA_SCHEMA.xtrabackup_history表中,用作增量备份的基础。
- --decrypt=name 解密先前使用--encrypt选项创建的备份中所有带有.xbcrypt扩展名的文件。
- --remove-original 解密和解压缩后删除所有的.qp、.zst、.lz4和.xbcrypt文件。
- --ftwrl-wait-query-type=name 指定在innobackupex开始全局锁前允许完成的查询类型。默认为所有。
- --kill-long-query-type=name 指定用于解锁全局锁的需要被终止的查询类型。默认为"SELECT"。
- --history[=name] 启用备份历史记录跟踪到PERCONA_SCHEMA.xtrabackup_history表。可选的历史系列名称可用于当前备份记录。
- --kill-long-queries-timeout=# 指定innobackupex在启动FLUSH TABLES WITH READ LOCK和终止阻塞它的查询之间等待的秒数。默认为0,表示不终止任何查询。
- --ftwrl-wait-timeout=# 指定innobackupex在运行FTWRL之前等待阻塞FTWRL的查询的秒数。如果超时时仍有此类查询,innobackupex将终止并返回错误。默认为0,即立即启动FTWRL。
- --ftwrl-wait-threshold=# 指定innobackupex检测到长时间运行查询的运行时间阈值,用于非零值的--ftwrl-wait-timeout。直到存在此类长时间运行查询,FTWRL才会启动。如果--ftwrl-wait-timeout为0,则此选项无效。默认值为60秒。
- --debug-sleep-before-unlock=# 仅用于XtraBackup测试套件的调试选项,指定睡眠时间(秒)。
- --safe-slave-backup-timeout=# --safe-slave-backup应该等待Slave_open_temp_tables变为零的秒数。默认为300秒。
- --check-privileges 在执行任何查询之前检查数据库用户的权限。
- --read-buffer-size[=#] 设置数据文件读取缓冲区大小,给定的值会按页大小进行缩放。默认为10Mb。
- --server-public-key-path=name 服务器公共RSA密钥的文件路径,以PEM格式。
- --get-server-public-key 获取服务器的公钥。
- --ssl-mode=name SSL连接模式。
- --ssl-ca=name PEM格式的CA文件。
- --ssl-capath=name CA目录。
- --ssl-cert=name PEM格式的X509证书。
- --ssl-cipher=name 使用的SSL密码。
- --ssl-key=name PEM格式的X509密钥。
- --ssl-crl=name 证书吊销列表。
- --ssl-crlpath=name 证书吊销列表路径。
- --tls-version=name 使用的TLS版本,允许的值有:TLSv1.2、TLSv1.3。
- --ssl-fips-mode=name SSL FIPS模式(仅适用于OpenSSL),允许的值有:OFF、ON、STRICT。
- --tls-ciphersuites=name 使用的TLS v1.3密码套件。
- --ssl-session-data=name 用于启用SSL会话重用的会话数据文件。
- --ssl-session-data-continue-on-failed-reuse 如果设置为ON,即使无法重用会话数据,也允许连接成功。
- --tls-sni-servername=name 传递给服务器的SNI服务器名称。
- --transition-key[=name] 用于加密表空间密钥的过渡密钥。
- --xtrabackup-plugin-dir=name xtrabackup插件的目录。
- --plugin-load=name 要加载的插件列表。
- --generate-new-master-key 在执行copy-back时生成新的主密钥。
- --generate-transition-key 生成过渡密钥并存储到密钥环中。
- --keyring-file-data[=name] 密钥环文件的路径。
- --component-keyring-config[=name] 加载组件配置的路径。用于--prepare、--move-back、--copy-back。
- --component-keyring-file-config[=name] 加载密钥环组件配置的路径。用于--prepare、--move-back、--copy-back。(已弃用,请使用--component-keyring-config代替)
- --parallel=# 并行数据文件传输的线程数。默认值为1。
- --fifo-streams=# 用于并行数据文件流的FIFO文件数。将此参数设置为1将禁用FIFO,数据流将发送到STDOUT。
- --fifo-dir=name 写入命名管道的目录。如果省略,则使用--target-dir。
- --fifo-timeout=# 等待另一端打开FIFO流以供读取的秒数。默认为60秒。
- --strict 在传递给xtrabackup的参数无效时失败并显示错误。(默认启用;使用--skip-strict禁用)
- --rocksdb-checkpoint-max-age=# ROCKSDB检查点的最大年龄(秒)。
- --rocksdb-checkpoint-max-count=# ROCKSDB检查点的最大计数。
- -h, --datadir=name 数据库根目录的路径。
- -t, --tmpdir=name 临时文件的路径。可以指定多个路径,用冒号(:)分隔,此时会轮流使用这些路径。
- --log[=name] MySQL选项兼容性中忽略的选项。
- --log-bin[=name] 日志序列的基本名称。
- --log-bin-index=name 保存二进制日志文件名称的文件。
- --innodb[=name] MySQL选项兼容性中忽略的选项。
- --innodb-adaptive-hash-index 启用InnoDB自适应哈希索引(默认启用)。使用--skip-innodb-adaptive-hash-index来禁用。(默认启用;使用--skip-innodb-adaptive-hash-index来禁用。)
- --innodb-autoextend-increment=# 数据文件自动扩展增量(以兆字节为单位)。
- --innodb-buffer-pool-size=# InnoDB用于缓存数据和索引的内存缓冲池大小。
- --innodb-checksums 启用InnoDB校验和验证(默认启用)。使用--skip-innodb-checksums来禁用。(默认启用;使用--skip-innodb-checksums来禁用。)
- --innodb-data-file-path=name 各个文件及其大小的路径。
- --innodb-data-home-dir=name InnoDB表空间的公共部分。
- --innodb-io-capacity[=#] 服务器可以执行的IOPs数。调整后台IO速率。
- --innodb-read-io-threads=# InnoDB后台读IO线程数。
- --innodb-write-io-threads=# InnoDB后台写IO线程数。
- --innodb-file-per-table 将每个InnoDB表存储到数据库目录中的.ibd文件中。
- --innodb-flush-log-at-trx-commit[=#] 设置为0(每秒写入和刷新一次)、1(每个事务提交时写入和刷新)或2(提交时写入、每秒刷新一次)。
- --innodb-flush-method=name 刷新数据的方法。
- --innodb-force-recovery=# 在数据库磁盘映像损坏时帮助保存数据。
- --innodb-log-buffer-size=# InnoDB用于将日志写入磁盘上日志文件的缓冲区大小。
- --innodb-log-file-size=# 日志组中每个日志文件的大小。
- --innodb-log-files-in-group=# 日志组中的日志文件数。InnoDB循环写入这些文件。建议值为3。
- --innodb-log-group-home-dir=name InnoDB日志文件的路径。
- --innodb-max-dirty-pages-pct=# 缓冲池中允许的脏页百分比。
- --innodb-open-files=# 同时在最大值上保持打开的InnoDB文件数。
- --innodb-use-native-aio 如果平台支持,则使用本机AIO。
- --innodb-page-size=# 数据库的通用页大小。
- --innodb-log-block-size=# 事务日志文件的日志块大小。不支持更改已创建的日志文件。请自行决定风险!
- --innodb-buffer-pool-filename=name 用于转储/加载InnoDB缓冲池的文件名。
- --debug-sync=name 调试同步点。仅用于xtrabackup测试套件。
- --innodb-checksum-algorithm=name InnoDB用于页面校验和的算法。[CRC32, STRICT_CRC32, INNODB, STRICT_INNODB, NONE, STRICT_NONE]
- --innodb-log-checksums 是否计算并要求InnoDB重做日志块的校验和。(默认启用;使用--skip-innodb-log-checksums来禁用。)
- --innodb-undo-directory=name Undo表空间文件所在的目录。此路径可以是绝对路径。
- --innodb-directories=name 用于扫描表空间文件的目录列表。默认为扫描'innodb-data-home-dir;innodb-undo-directory;datadir'。
- --temp-tablespaces-dir=name 临时表空间文件所在的目录。此路径可以是绝对路径。
- --innodb-undo-tablespaces=# 使用的撤消表空间数。
- --innodb-redo-log-encrypt 启用或禁用REDO表空间的加密。
- --innodb-undo-log-encrypt 启用或禁用UNDO表空间的加密。
- --defaults-group=name 配置文件中的默认组(默认为“mysqld”)。
- --open-files-limit=# 使用setrlimit()保留的最大文件描述符数。
- --server-id=# 被备份的服务器实例。
- --rocksdb-datadir=name RocksDB数据目录。
- --rocksdb-wal-dir=name RocksDB WAL目录。
- --register-redo-log-consumer 在备份开始时注册重做日志消费者。如果启用此选项,将阻止服务器清除重做日志,如果PXB重做,跟随线程仍在复制,则会阻塞服务器上的DML。
总结
Percona XtraBackup 8 是一个强大的备份工具,适用于需要高可用性和数据一致性的 MySQL 数据库环境。它的主要优点包括无停机备份、高性能、增量备份和灵活的恢复选项。尽管有一定的学习曲线,但其开源免费、可靠性高的特性使其成为大型数据库备份的理想选择。通过合理配置和使用相关参数,可以实现高效的全量和增量备份,确保数据的安全性和可恢复性。
作者介绍
吴守阳,51CTO社区编辑,拥有8年DBA工作经验,熟练管理MySQL、Redis、MongoDB等开源数据库。精通性能优化、备份恢复和高可用性架构设计。善于故障排除和自动化运维,保障系统稳定可靠。具备良好的团队合作和沟通能力,致力于为企业提供高效可靠的数据库解决方案。