当前位置:首页 > 技术 > 正文内容

Percona Xtrabackup:MySQL数据库热备份工具详解

访客 技术 2026年9月22日 12
  1. XtraBackup概述

Percona XtraBackup是一款专为MySQL设计的热备份工具,它能够在不锁定数据库的情况下执行备份操作。该工具支持对Percona Server、MySQL和MariaDB等主流数据库系统进行热备份。

XtraBackup的官方下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

  1. XtraBackup主要参数解析

参数 说明
--print-defaults 显示备份将使用的参数配置,添加此参数不会实际执行备份
--no-defaults 除--login-path指定的登录配置文件外,不从其他文件读取参数
--defaults-file=# 从指定文件中读取相关参数配置
--defaults-extra-file=# 在读取全局配置文件后,额外读取指定文件
--defaults-group-suffix=# 使用concat(组名,后缀)方式读取配置组信息
--login-path=# 指定登录配置文件路径
-v, --version 输出xtrabackup版本信息
--target-dir=name 设置备份文件存储目录
--backup 执行备份操作并将结果保存到target-dir指定的路径
--stats 计算数据目录的统计信息(建议在MySQL离线状态下使用)
--prepare 为从备份恢复做准备
--export 在准备阶段为导入到其他数据库创建必要文件
--apply-log-only 在准备过程中应用完日志后停止恢复进程,不执行LSN操作
--print-param 输出回拷过程中MySQL服务所需的参数
--use-memory=# 备份/恢复过程中替代innodb_buffer_pool_size的内存值
--throttle=# 限制每秒IO操作数量(读和写),值为IOS(用于--backup)
--log[=name] 此参数已被忽略,原用于监控MySQL选项
--log-copy-interval=# 日志复制线程检查间隔(毫秒,默认为1秒)
--extra-lsndir=name 在指定目录保存xtrabackup_checkpoints的额外副本(用于--backup)
--incremental-lsn=name 仅复制比指定LSN'high:low'更新的.ibd页面,LSN值错误将导致备份失败(用于--backup)
--incremental-basedir=name 指定上一次备份路径,仅复制比上次更新的.ibd文件(用于增量备份)
--incremental-dir=name 在指定目录应用.delta和logfile文件(用于--prepare)
--to-archived-lsn=# 不应用大于指定值的归档日志序列号
--tables=name 指定需要备份的表名
--tables-file=name 指定表名列表文件,格式为:database.table
--databases=name 指定需要备份的数据库名
--databases-file=name 指定数据库列表文件路径
--tables-exclude=name 指定不备份的表名,优先级高于--tables
--databases-exclude=name 指定不备份的数据库名,优先级高于--databases
--create-ib-logfile 在--prepare操作后创建ib_logfile*文件,重复执行可创建多个
--stream=name 指定备份文件输出格式,支持tar和xbstream
--compress[=name] 指定备份文件压缩算法,支持quicklz和lz4,可压缩至原大小的1/5
--compress-threads=# 指定并行数据压缩线程数,默认为1
--compress-chunk-size=# 指定压缩线程工作缓冲区大小(字节),默认为64K
--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文件,包含备份时的节点状态,仅用于Percona-XtraDB-Cluster备份
--slave-info 备份复制从服务器时非常有用,输出二进制日志位置和主服务器信息,并写入xtrabackup_slave_info文件
--page-tracking 使用服务器页面跟踪功能进行增量备份,而非全面扫描数据文件
--no-lock 禁用DDL锁和表锁,使用"FLUSH TABLES with READ LOCK",仅适用于全InnoDB表且不关心二进制日志位置的情况
--lock-ddl 如果服务器支持,在备份开始时发出LOCK TABLES/LOCK INSTANCE阻止所有DDL操作(默认启用,可用--skip-lock-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 通过命令SET GLOBAL innodb_buffer_pool_dump_now=ON转储InnoDB缓冲池
--dump-innodb-buffer-pool-timeout=# 指定xtrabackup等待InnoDB缓冲池转储完成的秒数
--dump-innodb-buffer-pool-pct=# 指定要转储的InnoDB缓冲池百分比
--safe-slave-backup 备份开始时停止从SQL线程,等待Slave_open_temp_tables为零后开始备份
--rsync 使用rsync实用程序优化本地文件传输,不能与--一起使用
--force-non-empty-directories 允许--copy-back或--move-back将文件传输到非空目录,但不会覆盖现有文件
--no-server-version-check 允许在服务器版本大于PXB支持的版本时继续备份
--no-version-check 禁用--version-check启用的版本检查
--tables-compatibility-check 启用引擎兼容性警告(默认启用,可用--skip-tables-compatible-check禁用)
--no-backup-locks 控制是否使用备份锁而非FLUSH TABLES WITH READ LOCK,默认禁用
--rollback-prepared-trx 强制回滚已准备的InnoDB事务
--decompress 解压使用--compress=quicklz备份的.qp扩展名文件(需安装qpress)
-u, --user=name 指定连接MySQL服务的用户名
-H, --host=name 指定使用TCP/IP连接MySQL的主机名
-P, --port=# 指定使用TCP/IP连接MySQL的端口
-p, --password[=name] 指定连接MySQL的密码
-S, --socket=name 指定本地连接MySQL的socket文件路径
--incremental-history-name=name 指定存储在PERCONA_SCHEMA中的备份系列名称
--incremental-history-uuid=name 指定存储在PERCONA_SCHEMA中的特定历史记录UUID
--decrypt=name 解密使用--encrypt选项创建的.xbcrypt扩展名文件(支持AES128、AES192和AES256)
--remove-original 解密解压后删除.qp和.xbcrypt文件
--ftwrl-wait-query-type=name 指定在innobackupex发出全局锁前允许完成的查询类型,默认为all
--kill-long-query-type=name 指定应终止哪些类型的查询以解除全局锁阻塞,默认为SELECT
--history[=name] 在PERCONA_SCHEMA.xtrabackup_history表中跟踪备份历史
--kill-long-queries-timeout=# 指定从启动FLUSH TABLES WITH READ LOCK到终止阻塞查询的等待秒数,默认为0
--ftwrl-wait-timeout=# 指定innobackupex在运行FTWRL前等待阻塞查询的秒数,默认为0
--ftwrl-wait-threshold=# 指定检测长时间运行的查询的阈值,默认为60秒
--debug-sleep-before-unlock=# XtraBackup测试套件专用调试选项
--safe-slave-backup-timeout=# 等待Slave_open_temp_tables变为0的秒数,默认为300秒
--check-privileges 执行任何查询前检查数据库用户权限
--read-buffer-size[=#] 设置数据文件读取缓冲区大小,默认为10MB
--server-public-key-path=name PEM格式的服务器RSA公钥文件路径
--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
--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,即使会话数据无法重用也允许连接
--transition-key[=name] 用于加密表空间键的转换键
--xtrabackup-plugin-dir=name xtrabackup插件目录
--plugin-load=name 要加载的插件列表
--generate-new-master-key 复制时生成新的主密钥
--generate-transition-key 生成转换密钥并将其存储到密钥环
--keyring-file-data[=name] 密钥环文件路径
--component-keyring-config[=name] 加载组件配置的路径,用于--prepare、--move-back、--copy-back和--stats
--component-keyring-file-config[=name] 加载密钥环组件配置的路径(已弃用,请使用--component-keyring-config)
--parallel=# 用于并行数据文件传输的线程数,默认为1
--strict 传递无效参数时报错(默认启用,可用--skip-strict禁用)
--rocksdb-checkpoint-max-age=# RocksDB最大检查点年龄(秒)
--rocksdb-checkpoint-max-count=# RocksDB检查点的最大数量
-h, --datadir=name MySQL数据库的数据目录
-t, --tmpdir=name 临时文件路径,可指定多个路径用冒号(:)分隔
--log-bin[=name] MySQL二进制日志
--log-bin-index=name 保存二进制日志名称的文件
--innodb[=name] MySQL选项兼容性,忽略此选项
--innodb-adaptive-hash-index 启用InnoDB自适应哈希索引(默认启用)
--innodb-autoextend-increment=# 数据文件自动扩展大小(MB)
--innodb-buffer-pool-size=# InnoDB用于缓存表数据和索引的内存缓冲区大小
--innodb-checksums 启用InnoDB校验和验证(默认启用)
--innodb-data-file-path=name 单个文件的路径及其大小
--innodb-data-home-dir=name InnoDB数据库文件的家目录
--innodb-io-capacity[=#] 服务器能达到的IOPS,用于调优后台IO速率
--innodb-file-io-threads=# InnoDB文件I/O线程数
--innodb-read-io-threads=# InnoDB后台读I/O线程数
--innodb-write-io-threads=# InnoDB后台写I/O线程数
--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日志组中每个日志文件的大小
--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页面大小,默认为16K
--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重做日志块是否计算和校验(默认启用)
--innodb-undo-directory=name undo表空间文件所在目录,可为绝对路径
--innodb-directories=name 扫描表空间文件的目录,默认为扫描innodb-data-home-dir;innodb-undo-directory;datadir
--temp-tablespaces-dir=name 临时表空间存储路径,可为绝对路径
--innodb-undo-tablespaces=# undo表空间数量
--innodb-redo-log-encrypt 启用/禁用REDO表空间加密
--innodb-undo-log-encrypt 启用/禁用UNDO表空间加密
--defaults-group=name 配置文件中的默认组(默认为"mysqld")
--open-files-limit=# 使用setrlimit()保留的文件描述符的最大数量
--server-id=# MySQL server_id
--rocksdb-datadir=name RocksDB数据目录
--rocksdb-wal-dir=name RocksDB预写日志目录

注:以上参数基于xtrabackup 8.0.29版本。

  1. XtraBackup备份与恢复实践

3.1 完整备份与恢复

执行完整备份

[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --backup --target-dir=/backups/full_backup

执行恢复

[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --prepare --target-dir=/backups/full_backup
[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --copy-back --target-dir=/backups/full_backup --datadir=/var/lib/mysql

3.2 增量备份与恢复

完整备份+增量备份

[mysql]# xtrabackup --user=admin --password=secret --socket=/var/run/mysqld/mysqld.sock --backup --target-dir=/backups/base_backup
[mysql]# xtrabackup --user=admin --password=secret --socket=/var/run/mysqld/mysqld.sock --backup --target-dir=/backups/inc_backup_1 --incremental-basedir=/backups/base_backup
[mysql]# xtrabackup --user=admin --password=secret --socket=/var/run/mysqld/mysqld.sock --backup --target-dir=/backups/inc_backup_2 --incremental-basedir=/backups/inc_backup_1

恢复过程

[mysql]# xtrabackup --prepare --apply-log-only --target-dir=/backups/base_backup
[mysql]# xtrabackup --prepare --apply-log-only --target-dir=/backups/base_backup --incremental-dir=/backups/inc_backup_1
[mysql]# xtrabackup --prepare --target-dir=/backups/base_backup --incremental-dir=/backups/inc_backup_2
[mysql]# xtrabackup --prepare --target-dir=/backups/base_backup
[mysql]# xtrabackup --copy-back --target-dir=/backups/base_backup --datadir=/<mysql_data_dir>/

3.3 压缩备份与恢复

安装qpress压缩工具

[root]# yum install qpress -y 

执行压缩备份

[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --backup --target-dir=/backups/comp_backup --compress

解压并恢复

[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --decompress --target-dir=/backups/comp_backup
[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --prepare --target-dir=/backups/comp_backup
[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --copy-back --target-dir=/backups/comp_backup --datadir=/<mysql_data_dir>/

3.4 加密备份与恢复

生成加密密钥

[mysql]# openssl rand -base64 24
aBcD3fGh8jKlMnOpQrStUvWxYz123456/

执行加密备份

[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --backup --encrypt=AES256 --encrypt-key="aBcD3fGh8jKlMnOpQrStUvWxYz123456/" --target-dir=/backups/enc_backup

解密并恢复

[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --decrypt=AES256 --encrypt-key="aBcD3fGh8jKlMnOpQrStUvWxYz123456/" --target-dir=/backups/enc_backup
[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --prepare --target-dir=/backups/enc_backup
[mysql]# xtrabackup -S /var/lib/mysql/mysql.sock --copy-back --target-dir=/backups/enc_backup --datadir=/<mysql_data_dir>/

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。