xtraBackup工具使用与介绍

xtraBackup

前提介绍
xtraBackup2.4适用于MySQL5.7版本及以下,xtraBackup8.0适用于MySQL8.0版本以上的,本次介绍中命令参数针对于MySQL8.0版本

工具下载官网:Software Downloads - Percona

在这里插入图片描述

一、备份原理

在这里插入图片描述

  1. 兼容性检查:Xtrabackup社区版本只支持 MyISAM , InnoDB , CSV , MRG_MYISAM 四种存储引擎的表,其他存储引擎的表不会备份;在这一步中,通过查询tables,若发现存在表的存储引擎不是上述四种引擎之一,会打印warning, 表明Xtrabackup不会备份该表。
  2. 启动redo后台备份线程:启动redo后台备份线程,从备份实例的最近一次checkpoint LSN的位置开始备份所有增量的redo log,一直持续到备份任务结束。
  3. 加载所有的innodb表空间:打开并扫描所有innodb表的数据文件,检查所有表空间的第一个页面,初始化所有表的内存结构。
  4. 备份nnodb表:**遍历步骤3所构建的表的内存结构,备份每一个innodb表的数据文件,备份的过程中会检查每个页面的数据是否正确。
  5. 加备份锁 FLUSH TABLES WITH READ LOCK (FTWRL):FTWRL锁是MySQL实例级的读锁,加锁过程复杂,且加锁之后,所有表的所有更新操作以及DDL都会堵塞。
  6. 备份非innodb表:因为在步骤5我们已经对实例加了读锁,因此,此时备份非innodb表是安全的,此时一定没有写业务。

5.7版本及以下

  1. 记录binlog当前的GTID信息:请注意,此时我们仍持有全局读锁。这一步主要是方便我们使用该备份集快速地创建出备机。

  2. 停止redo备份线程

8.0版本之后

  1. 查询一致性:MySQL服务器会分别对redo log,binlog等加轻量级锁,获取一致性备份点,会告诉我们一致性的redo log LSN以及binlog的GTID

  2. 拷贝最后一个binlog文件

  3. 释放锁资源备份结束

二、常用参数介绍

xtrabackup选项

选项
--apply-log-only 
此项较为重要。主要应用与增备,在常规备份中,执行两种操作以使数据库保持一致:从日志文件对数据文件重播已提交的事务,回滚未提交的事务。在准备备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,它们很可能在下一次增量备份中提交。您应该使用—apply-log-only选项来防止回滚阶段
--backup
创建备份并且放入--target-dir目录中
--close-files
不保持文件打开状态,xtrabackup打开表空间的时候通常不会关闭文件句柄目的是为了正确处理DDL操作。然而,如果表空间数量非常巨大并且不适合任何限制,一旦文件不在被访问的时候这个选项可以关闭文件句柄.打开这个选项会产生不一致的备份。自己评估风险。。
--compact
创建一份没有辅助索引的紧凑备份
--compress
压缩所有输出数据,包括事务日志文件和元数据文件,通过指定的压缩算法,目前唯一支持的算法是quicklz.结果文件是qpress归档格式,每个xtrabackup创建的*.qp文件都可以通过qpress程序提取或者解压缩
--compress-chunk-size=#
压缩线程工作buffer的字节大小,默认是64K
--compress-threads=#
xtrabackup进行并行数据压缩时的worker线程的数量,该选项默认值是1,并行压缩('compress-threads')可以和并行文件拷贝('parallel')一起使用。例如:'--parallel=4 --compress --compress-threads=2'会创建4个IO线程读取数据并通过管道传送给2个压缩线程
--create-ib-logfile
这个选项目前还没有实现,目前创建Innodb事务日志,你还是需要prepare两次bakcup
--datadir=DIRECTORY
backup的源目录,mysql实例的数据目录。从my.cnf中读取,或者命令行指定
--defaults-extra-file=[MY.CNF]
在global files文件之后读取,必须在命令行的第一选项位置指定
--defaults-file=[MY.CNF]
唯一从给定文件读取默认选项,必须是个真实文件,必须在命令行第一个选项位置指定
--defaults-group=GROUP-NAME
从配置文件读取的组,innobakcupex多个实例部署时使用
--export
为导出的表创建必要的文件
--extra-lsndir=DIRECTORY
(for --bakcup):在指定目录创建一份xtrabakcup_checkpoints文件的额外的备份
--incremental-basedir=DIRECTORY
创建一份增量备份时,这个目录是增量别分的一份包含了full bakcup的Base数据集
--incremental-dir=DIRECTORY
prepare增量备份的时候,增量备份在DIRECTORY结合full backup创建出一份新的full backup
--incremental-force-scan
创建一份增量备份时,强制扫描所有增在备份中的数据页即使完全改变的page bitmap数据可用
--incremetal-lsn=LSN
创建增量备份的时候指定lsn。
--innodb-log-arch-dir
指定包含归档日志的目录。只能和xtrabackup --prepare选项一起使用
--innodb-miscellaneous
从My.cnf文件读取的一组Innodb选项。以便xtrabackup以同样的配置启动内置的Innodb。通常不需要显示指定
--log-copy-interval=#
这个选项指定了log拷贝线程check的时间间隔(默认1秒)
--log-stream
xtrabakcup不拷贝数据文件,将事务日志内容重定向到标准输出直到--suspend-at-end文件被删除。这个选项自动开启--suspend-at-end
--no-defaults
不从任何选项文件中读取任何默认选项,必须在命令行第一个选项
--databases=#
指定了需要备份的数据库和表
--database-file=#
指定包含数据库和表的文件格式为databasename1.tablename1为一个元素,一个元素一行
--parallel=#
指定备份时拷贝多个数据文件并发的进程数,默认值为1
--prepare
xtrabackup在一份通过--backup生成的备份执行还原操作,以便准备使用
--print-default
打印程序参数列表并退出,必须放在命令行首位
--print-param
使xtrabackup打印参数用来将数据文件拷贝到datadir并还原它们
--rebuild_indexes
在apply事务日志之后重建innodb辅助索引,只有和--prepare一起才生效
--rebuild_threads=#
在紧凑备份重建辅助索引的线程数,只有和--prepare和rebuild-index一起才生效
--stats
xtrabakcup扫描指定数据文件并打印出索引统计
--stream=name
将所有备份文件以指定格式流向标准输出,目前支持的格式有xbstream和tar
--suspend-at-end
使xtrabackup在--target-dir目录中生成xtrabakcup_suspended文件。在拷贝数据文件之后xtrabackup不是退出而是继续拷贝日志文件并且等待知道xtrabakcup_suspended文件被删除。这项可以使xtrabackup和其他程序协同工作
--tables=name
正则表达式匹配database.tablename。备份匹配的表
--tables-file=name
指定文件,一个表名一行
--target-dir=DIRECTORY
指定backup的目的地,如果目录不存在,xtrabakcup会创建。如果目录存在且为空则成功。不会覆盖已存在的文件
--throttle=#
指定每秒操作读写对的数量
--tmpdir=name
当使用--print-param指定的时候打印出正确的tmpdir参数,除此之外没有任何用。。
--to-archived-lsn=LSN
指定prepare备份时apply事务日志的LSN,只能和xtarbackup --prepare选项一起用
--user-memory = #
通过--prepare prepare备份时候分配多大内存,目的像innodb_buffer_pool_size。默认值100M如果你有足够大的内存。1-2G是推荐值,支持各种单位(1MB,1M,1GB,1G)
--version
打印xtrabackup版本并退出

三、

1、全量备份

  • 创建备份
xtrabackup -u root -p  --backup --target-dir=/data/backups/
--target-dir:备份存放的目录
  • 全量备份xtrabackup文件
backup-my.cnf: 备份期间使用的MySQL 配置文件。
ibdata1: InnoDB 存储引擎的系统表空间文件。它包含了表结构、数据和索引等信息。
mysql-bin.000005: 二进制日志文件,用于记录数据库的更改操作,以支持数据复制和恢复。
performance_schema: MySQL 的性能架构表,用于存储性能监控数据。
slave-bin.index: 从服务器的二进制日志索引文件,记录了从服务器的复制日志文件名。
undo_001: InnoDB 存储引擎的回滚段文件,用于支持事务的回滚操作。
xtrabackup_binlog_info: 备份期间的二进制日志信息,包括文件名和位置等,其中包含了
xtrabackup_info: 备份的元数据信息,包括备份开始和结束时间、备份类型等。
xtrabackup_slave_info: 备份期间的主从复制信息,记录了主服务器的位置等信息。
ib_buffer_pool: InnoDB 存储引擎的缓冲池文件,用于缓存数据页。
mysql: MySQL 数据库的目录,其中可能包含其他表和数据文件。
mysql.ibd: MySQL 系统表的表空间文件。
undo_002: InnoDB 存储引擎的回滚段文件,用于支持事务的回滚操作。
xtrabackup_checkpoints: 备份期间生成的检查点信息,用于增量备份。里面记录了LSN,告诉下一次增量从什么位置开始
xtrabackup_logfile: 备份期间生成的日志文件。记录了binlog日志文件,pos号,GTID信息,便于搭建主从
xtrabackup_tablespaces: 备份期间生成的表空间信息,用于支持 InnoDB 表的恢复。
  • 准备备份
 xtrabackup  --prepare --target-dir=/data/backups/
 --perepare:因为备份时开启了一个线程实时来检测redo log,那么备份出来的内容其中存在《开启事务但未提交》和《提交事务但未刷盘》的情况,使用perepare让没有提交的事务回滚,让没有刷盘的事务刷盘
  • 还原备份
xtrabackup --defaults-file=/etc/my.cnf  --defaults-file=/etc/my.cnf --copy-back --target-dir=/opt/mydump/
--defaults-file:从文件中读取datadir以及其他dir位置。参数必须放在第一位
--copy-back: 将target-dir备份的目录copy到mysql的datadir中。不使用这一步,copy target-dir 到datadir效果一致

2、增量备份

  • 创建全量备份
xtrabackup -u root -p --backup --target-dir=/data/backups/base
  • 创建第一份增量备份
xtrabackup -u root -p --backup --target-dir=/data/backups/base --incremental-basedir=/data/backups/incre1
--incremental-basedir:增量文件目录
  • 创建第二份增量备份
xtrabackup -u root -p --backup --target-dir=/data/backups/incre1 --incremental-basedir=/data/backups/incre2
  • 准备备份,将第一份增量备份合并到全量备份中
xtrabackup  --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/incre1
--apply-log-only:合并时在全备目录中不触发事务回滚,因为可能有的事务提交在增量中,触发回滚会丢失事务
  • 将第二份增量合并到全备中
xtrabackup  --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/incre2
注意:最后一次合并不需要加apply-log-only

3、部分备份

3.1、单库备份

  • 创建指定库的备份
xtrabackup -u root -p'ttpai' --backup --databases='ttpai_ttcc ttpai_user_element'  --target-dir=/data/backups/
--databases指定具体的库
  • 准备备份
 xtrabackup  --prepare --target-dir=/data/backups/
  • 还原备份
#将备份的库复制到MySQL的data目录中

3.2、单表备份

  • 创建指定库的备份

方式一、

/home/master/xtrabackup8/bin/xtrabackup -u root -p --backup --tables='^ttpai_user_element[.]UELE_BANK_.*'   --target-dir=/data/backups/
--tables:库名.表名的形式 默认启动正则表达式

方式二、

/home/master/xtrabackup8/bin/xtrabackup -u root -p --backup --tables-file=/tmp/backtable.txt   --target-dir=/data/backups/
--backtable.txt中存放备份的表名,每一个表名占一行
  • 准备备份
xtrabackup --prepare --export --target-dir=/data/backups/
--export:此命令使用于部分备份
  • 还原备份
#首先删除原来库中对应的表
ALTER TABLE <table_name> DISCARD TABLESPACE;
#将/data/backups/中对应的表 cp 到mysql datadir对应的库文件中

#重新建立表空间
ALTER TABLE <table_name> IMPORT TABLESPACE;

4、压缩备份

  • 开始压缩
xtrabackup --backup --parallel=4 --compress --compress-threads=2 -uroot -p --target-dir=/data/backups/
--compress:压缩所用的参数
--parallel: IO线程数量
--compress-threads: 压缩线程数量
  • 解压缩
xtrabackup --decompress --parallel=4 --remove-original --target-dir=/data/backups/
--decompress:解压命令
--remove-original: 解压完成后删除原压缩包
  • 准备

5、远程备份

/usr/local/xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf -u root -p  --stream=tar ./ | ssh mysql@192.168.8.63 \ "cat - > /backup_center/$(date +%Y-%m-%d_%H:%m:%S).tar"

  • 34
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值