介绍
Percona XtraBackup 是一款开源的备份工具,专为 MySQL 及其分支(如 Percona Server 和 MariaDB)数据库设计。它允许在不中断数据库操作的情况下执行热备份,确保数据的一致性和可恢复性,支持全量与增量,流式备份等。
工作原理
1、基于InnoDB崩溃恢复功能
XtraBackup 复制InnoDB数据文件,这会导致数据内部不一致,但随后它对文件执行崩溃恢复,使其成为一致且可用的数据库。这是因为InnoDB维护了一个重做日志(也称为事务日志),记录了对InnoDB数据的每一个更改。当InnoDB启动时,它会检查数据文件和事务日志,并执行以下两步操作:将已提交的事务日志条目应用到数据文件,并对修改但未提交数据的事务执行撤销操作。
2、重做日志消费者参数
在Percona XtraBackup 8.0.30-23版本中新增了这个参数(–register-redo-log-consumer),默认情况下是禁用的。启用该参数后,XtraBackup在备份开始时注册为重做日志消费者,服务器不会删除XtraBackup尚未复制的重做日志。消费者读取重做日志并手动推进日志序列号(LSN)。在此过程中,服务器会阻止写操作,并根据重做日志的消费情况确定何时清除日志。
3、LSN和数据文件的复制
XtraBackup在开始时会记录LSN,然后复制数据文件。由于文件可能会在复制过程中发生变化,因此它们反映了数据库在不同时间点的状态。同时,XtraBackup运行一个后台进程,监视事务日志文件,并从中复制更改。因为事务日志以循环方式写入且可能会被重用,所以XtraBackup需要不断地记录所有自开始执行以来的数据文件更改。
4、备份锁
在可能的情况下,XtraBackup使用备份锁(Backup locks)作为轻量级替代方案。这个功能在Percona Server for MySQL 5.6 版本中可用。MySQL 8.0允许通过 LOCK INSTANCE FOR BACKUP 语句获取实例级备份锁。XtraBackup在完成所有InnoDB/XtraDB数据和日志的备份后,才会对MyISAM和其他非InnoDB表进行锁定,以避免阻塞修改InnoDB表的DML查询。
5、权限要求
需要 BACKUP_ADMIN 权限来查询 performance_schema.log_status 以执行 LOCK INSTANCE FOR BACKUP 或 LOCK TABLES FOR BACKUP。
6、二进制日志坐标获取
如果实例只包含InnoDB表,XtraBackup会避免使用备份锁。此时,它会从 performance_schema.log_status 表获取二进制日志坐标。在MySQL 8.0中,如果使用 --slave-info 选项启动XtraBackup,仍然需要 FLUSH TABLES WITH READ LOCK。
7、备份过程
当服务器支持备份锁时,XtraBackup首先复制InnoDB数据,然后运行 LOCK TABLES FOR BACKUP,接着复制MyISAM表。完成后,XtraBackup将使用 LOCK BINLOG FOR BACKUP 阻止所有可能更改二进制日志位置或复制相关状态的操作,然后完成重做日志文件的复制并获取二进制日志坐标。之后,XtraBackup会解锁二进制日志和表。
8、准备阶段
在准备阶段,XtraBackup对复制的数据文件执行崩溃恢复,使用复制的事务日志文件。此过程完成后,数据库就可以恢复并使用。备份的MyISAM和InnoDB表最终会一致,因为在准备(恢复)过程结束后,InnoDB的数据会向前回滚到备份完成的时间点,而不是备份开始的时间点。
9、恢复
- 恢复数据文件:使用 --copy-back 或 --move-back 选项将备份数据恢复到目标目录。
- 应用重做日志:在准备阶段,XtraBackup 将重做日志中的所有更改应用到数据文件,确保数据库的一致性。
- 启动数据库:恢复完成后,可以启动数据库并正常使用。
优点
1.无停机备份:支持在线备份,无需停止数据库服务。
2.高性能:备份过程中对数据库性能影响最小。
3.增量备份:支持增量备份,减少存储空间和备份时间。
4.数据一致性:保证备份期间数据的一致性。
5.恢复灵活:支持部分恢复和时间点恢复。
6.速度快:恢复时间更快,正常运行时间更长。
7.资源限制:控制IO、线程、内存等资源限制。
缺点
1.学习曲线:对于新手来说,配置和使用可能需要一定的学习时间。
2.复杂环境支持:在某些复杂环境中(如多源复制或非常大的数据库),配置和使用可能较为复杂。
3.硬件需求:增量备份和还原可能需要更多的硬件资源(如磁盘和内存)。
版本限制
· 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。
使用场景
1.高可用环境:需要在不影响数据库运行的情况下进行备份。
2.大型数据库:适合处理大型数据库的备份需求。
3.数据恢复:提供可靠的数据恢复解决方案,包括部分恢复和时间点恢复。
4.增量备份需求:需要定期进行增量备份以节省存储空间和备份时间。
安装步骤
Percona-XtraBackup-8.0.35
代码语言:javascript复制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
账户授权
代码语言:javascript复制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;
备份示例
流式全量备份
代码语言:javascript复制流式全量备份到远程主机,不在本机落盘
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/
压缩全量备份
代码语言:javascript复制全量备份本地压缩
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/
增量备份
代码语言:javascript复制流式全量备份
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
增量1
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/incremental_1 --incremental-basedir=/jesong/xtrabackup/full > /jesong/xtrabackup/incremental_1/backup-image
增量2
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/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/
增量1
xbstream -x < /jesong/xtrabackup/incremental_1/backup-image -C /jesong/xtrabackup/incremental_1_work
增量2
xbstream -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/
增量1
xtrabackup --decompress --parallel=4 --use-memory=200MB --target-dir=/jesong/xtrabackup/incremental_1_work
增量2
xtrabackup --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/
增量1
xtrabackup --prepare --apply-log-only --parallel=4 --use-memory=200MB --incremental-dir=/jesong/xtrabackup/incremental_1_work --target-dir=/jesong/xtrabackup/xbstream-dir/
增量2
xtrabackup --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,备份仍然是一致的,但在恢复后数据库服务器会在启动时执行回滚操作。这可能会增加恢复时间,因此推荐在备份准备阶段完成回滚。
部分备份
代码语言:javascript复制指定表或以什么开头都会备份
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
恢复方案一:需要清空数据目录
代码语言:javascript复制xtrabackup --copy-back --target-dir=/jesong/xtrabackup/test
恢复方案二:拷贝数据文件
代码语言:javascript复制1、要从备份中恢复分区,必须丢弃表空间 该表:
ALTER TABLE name_p4 DISCARD TABLESPACE;
2、下一步是将文件从备份复制到MySQL数据目录:.ibd
cp /mnt/backup/2012-08-28_10-29-09/imdb/name#P#p4.ibd /var/lib/mysql/imdb/name_p4.ibd
3、最后一步是导入表空间:
ALTER TABLE name_p4 IMPORT TABLESPACE;
相关参数
代码语言:javascript复制--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 数据库环境。它的主要优点包括无停机备份、高性能、增量备份和灵活的恢复选项。尽管有一定的学习曲线,但其开源免费、可靠性高的特性使其成为大型数据库备份的理想选择。通过合理配置和使用相关参数,可以实现高效的全量和增量备份,确保数据的安全性和可恢复性。