1、概述
2、xtrabackup 安装
1)安装依赖包
2)安装 xtrabackup
3)查看软件版本信息
3、xtrabackup 参数介绍
4、创建全量备份
5、新增数据及创建增量备份1
6、新增数据及创建增量备份2
7、模拟数据库故障
8、恢复数据库
1)准备恢复全量备份
2)将增量备份1加载至全备中
3)将增量备份2加载至全备中
4)恢复数据库
5)调整数据及日志目录属主属组
6)启动数据库
7)检查数据是否完整
参考文档
概述
Xtrabackup 是由 Percona 公司开发的一款 MySQL 物理热备份工具,是 MySQL 数据库较为受欢迎的主流备份工具。
其具有备份和恢复速度快,能够基于压缩功能节约磁盘空间等优点。
需要注意由于MySQL 8.0版本redo日志和数据字典的改变,xtrabackup 8.0版本只支持对mysql 8.0和percona 8.0系列的数据库进行备份恢复。
xtrabackup 安装
软件下载地址: https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.35-31.1.el7.x86_64.rpm
1)安装依赖包
安装过程需要用到libev、zstd等软件包,可从以下地址下载。
http://rpmfind.net/linux/remi/enterprise/7/remi/x86_64/libev-4.15-0.7.el7.remi.x86_64.rpm
https://mirrors.aliyun.com/epel/7/x86_64/Packages/z/zstd-1.5.5-1.el7.x86_64.rpm
yum -y install libev-4.15-0.7.el7.remi.x86_64.rpm
yum -y install zstd-1.5.5-1.el7.x86_64.rpm
2)安装 xtrabackup
yum -y install percona-xtrabackup-80-8.0.35-31.1.el7.x86_64.rpm
3)查看软件版本信息
xtrabackup --version
xtrabackup 参数介绍
xtrabackup --help
用法:
Usage: [xtrabackup [–defaults-file=#] --backup | xtrabackup [–defaults-file=#] --prepare] [OPTIONS]
–print-defaults 打印程序的参数列表并退出
–no-defaults 不从任何配置文件中读取参数信息,除了登录文件
–defaults-file=# 仅从给定文件读取默认选项,必须是个真实文件,必须在命令行第一个选项位置指定。
–defaults-extra-file=# 在读取全局文件后读取此文件
–defaults-group-suffix=# 还可以阅读带有concat(group,suffix)的组
–login-path=# 读取登录文件的路径
-v, --version 打印 xtrabackup版本信息
–target-dir=name 指定备份的目标目录,如果目录不存在,xtrabackup 将创建它。如果目录确实存在且为空,则xtrabackup 将成功,xtrabackup 不会覆盖现有的文件,会在操作系统层面报错,文件存在。
–backup 备份到target-dir指定的目录
–stats 计算 datadir 中的统计信息(建议使用离线mysqld)
–prepare 启动mysql服务器备份的prepare(准备)阶段
–export 在prepare阶段创建要导入到另一个数据库的文件–apply-log-only 在准备阶段应用日志时,停止恢复进程,不向前推进LSN。
注意:此选项较为重要。主要应用于增量备份,在常规备份中,执行两种操作以使数据库保持一致:从日志文件对数据文件重播已提交的事务,以及回滚未提交的事务。
在准备备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,它们很可能在下一次增量备份中提交。您应该使用–apply-log-only 选项来防止回滚阶段。
如果您不使用–apply-log-only 选项来防止回滚阶段,那么您的增量备份将是无用的。
事务回滚后,无法应用进一步的增量备份。
–print-param 输出mysqld copyback所需的参数
–use-memory=# 备份的时候指定的内存,该选项表示和–apply-log选项一起使用,prepare备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),使用该值代替 buffer_pool_size。
–throttle=# 和—backup一起使用,限制每秒IO操作(读写对)的IOS数值。
–log[=name] 忽略MySQL选项兼容性的选项
–log-copy-interval=# 日志复制线程执行检查之间的时间间隔(毫秒)(默认值为1秒)
–extra-lsndir=name 和–backup一起使用,在此目录中保存一份额外的xtrabackup_checkpoints文件。
–to-archived-lsn=# 指定prepare备份时apply事务日志LSN,只能和xtrabackup --prepare选项一起使用。
–tables=name 通过正则表达式过滤表名
–tables-file=name 按文件中的精确的database.table名称列表进行筛选。
–databases=name 按照数据库列表进行过滤
–databases-file=name 按照文件中的数据库列表进行过滤
–tables-exclude=name 按正则表达式过滤表名。操作方式和–tables一样,但是匹配的表名将不备份,此参数的优先级高于—tables。
–databases-exclude=name 不包括基于名称的数据库,操作方式和–databases一样,但是匹配的库名将不被备份,优先级高于—databases。
–create-ib-logfile 暂时不起作用 也在“–prepare”之后创建ib_logfile*。###如果要创建ib_logfile*,只需在相同的选项中重新执行此命令###。
–stream[=name] 使用xbstream格式流式传输所有备份文件。根据–FIFO-streams选项,文件被流式传输到STDOUT或FIFO文件。唯一支持的流格式是“xbstream”。
–compress[=name] 压缩所有输出数据,包括事务日志文件和元数据文件。使用指定的压缩算法压缩单个备份文件。支持的算法是“lz4”和“zstd”。默认算法为“zstd”。
–decompress 解压缩使用–compress选项生成的所有压缩文件。
–compress-threads=# 备份压缩的并行线程,默认为1.并行压缩(‘compress-threads’)可以和并行文件拷贝(‘parallel’)一起使用。例如:'–parallel=4 --compress --compress-threads=2’会创建4个IO线程读取数据并通过管道传送给2个压缩线程。
–compress-chunk-size=# 压缩线程的工作缓冲区大小(字节)。默认值为64K。
–encrypt=name 该选项表示通过ENCRYPTION_ALGORITHM的算法加密innodb数据文件的备份,目前支持的算法有AES128,AES192,AES256。
–encrypt-key=name 要使用的加密密钥,因为会记录到命令行,所以不推荐使用。
–encrypt-key-file=name 包含要使用的加密密钥的文件,加密key可通过以下命令行命令生成:openssl rand -base64 24。
–encrypt-threads=# 该选项表示并行加密的worker线程数量,默认为1。
–encrypt-chunk-size=# 该选项表示每个加密线程worker 缓冲区的大小,单位是字节,默认是64K。
–decrypt=name 解密使用–encrypt选项创建的备份中扩展名为.xbcrypt的所有文件。
–remove-original 解密和解压缩后删除.qp、.zst、.lz4和.xbcrypt文件。
–rebuild-threads=# 在紧凑备份中重建索引的线程数,只有和–prepare和–rebuild-indexes一起才生效。
–rebuild-indexes 在apply事务日志之后重建索引,只有和–prepare一起才生效。
–close-files 该选项表示关闭不再访问的文件句柄,当xtrabackup打开表空间通常并不关闭文件句柄,目的是正确的处理DDL操作。如果表空间数量巨大,这是一种可以关闭不再访问的文件句柄的方法。使用该选项有风险,会有产生不一致备份的可能。
–core-file 写核心致命信号
–copy-back 做数据恢复时将备份的所有数据文件拷贝到MySQL服务器的datadir目录。
–move-back 这个选项与–copy-back相似,将以前备份中的所有文件从备份目录移动到实际的datadir位置。请谨慎使用,因为它会删除备份文件。使用场景:没有足够的磁盘空间同时保留数据文件和Backup副本。
3.由于文件属性会被保留,大部分情况下你需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户。
–slave-info 此选项在备份slave从属服务器时非常有用。它打印主服务器的二进制日志位置和名称。它还将此信息作为“CHANGE MASTER”命令写入“xtrabackup_slave_info”文件。通过在此备份上启动slave从属服务器并发出“CHANGE master”命令,并将二进制日志位置保存在“xtrabackup_slave_info”文件中,可以为主服务器设置新的从属服务器。
–no-lock 该选项表示关闭FTWRL的表锁,只有在所有表都是Innodb表并且不关心backup的binlog pos点,如果有任何DDL语句正在执行或者非InnoDB正在更新时(包括mysql库下的表),都不应该使用这个选项,后果是导致备份数据不一致,如果考虑备份因为获得锁失败,可以考虑–safe-slave-backup立刻停止复制线程。
–lock-ddl 如果服务器在备份开始时支持,则在备份时发出LOCK TABLES/LOCK INSTANCE以阻止所有DDL操作。(默认为on;使用–skip-lock-ddl禁用。)
–lock-ddl-timeout=# 如果LOCK TABLES FOR BACKUP未在给定超时内返回,请中止备份。
–lock-ddl-per-table 在xtrabackup开始复制阶段之前锁定每个表的DDL直到备份完成。
–safe-slave-backup 该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,backup会立刻开始,否则SQL线程启动或者关闭直到没有打开的临时表。
–safe-slave-backup-timeout=# 如果slave_open_temp_tables在该选项指定的值(默认300秒)之后不为0,从库sql线程会在备份完成的时候重启。
–rsync 该选项表示通过rsync工具优化本地传输,当指定这个选项,innobackupex使用rsync拷贝非Innodb文件而替换cp,当有很多DB和表的时候会快很多,不能和–stream一起使用。
–force-non-empty-directories 指定该参数时候,使得 --copy-back或–move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果–copy-back和–move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败。
–no-version-check 该选项关闭版本检查,当–version-check选项开启的时候。
–tables-compatibility-check 选项开启表存储引擎兼容性告警,默认开启。可使用–skip-tables-compatibility-check关闭。
–no-backup-locks 该选项在backup阶段控制锁,替换FLUSH TABLES WITH READ LOCK命令。关闭需使用参数–no-backup-locks。当mysql服务器不支持backup locks时候此参数无效。
-u, --user=name 连接的用户名
-H, --host=name 连接的IP地址
-P, --port=# 数据库的端口
-p, --password[=name] 连接用户的密码
-S, --socket=name 备份时连接的unix操作系统的socket文件
-h, --datadir=name 数据恢复时候的数据目录。从my.cnf中读取,或者命令行指定。
-t, --tmpdir=name 当使用–print-param指定的时候打印出正确的tmpdir参数。用于存储临时文件的路径,在轮循模式下可以指定多个路径,使用英文的:分隔
–parallel=# 指定备份时拷贝多个数据文件并发的进程数,默认值为1。
–log-bin[=name] binlog的日志序列
–incremental-lsn=name 和–backup一起使用。仅复制比指定LSN’high:low’新的.ibd页##注意##:如果指定了错误的LSN值,则无法对此进行诊断,从而导致备份不可用。小心!
–incremental-basedir=name 和–backup一起使用,仅拷贝.ibd中新增的数据到指定路径,创建增量备份。
–incremental-dir=name 和–prepare一起使用,将.delta文件和logfile保存在指定的路径。
–incremental-force-scan 该选项表示创建一份增量备份时,强制扫描所有增量备份中的数据页。
–incremental-history-name 该选项表示存储在PERCONA_SCHEMA.xtrabackup_history基于增量备份的历史记录的名字。Percona Xtrabackup搜索历史表查找最近(innodb_to_lsn)成功备份并且将to_lsn值作为增量备份启动初始lsn.与innobackupex–incremental-history-uuid、–incremental-basedir、–incremental-lsn互斥。如果没有检测到有效的lsn,xtrabackup会返回error。和选项–incremental一起使用。
–incremental-history-uuid 该选项表示存储在percona_schema.xtrabackup_history基于增量备份的特定历史记录的UUID。和选项–incremental一起使用。
创建全量备份
进行备份的数据库用户,需要具有BACKUP_ADMIN 权限
grant BACKUP_ADMIN on *.* to root@'%';
flush privileges;
创建全量备份存放目录
mkdir -p /data/backup/0922/full_db
创建全量备份
xtrabackup --user=root --password=Root#123 --backup --target-dir=/data/backup/0922/full_db
–backup: 表示该操作为备份操作
–target-dir: 指定备份文件的存放路径
–user: 备份使用的数据库用户
–password: 该用户的密码
新增数据及创建增量备份1
新增数据
create database testdb;
use testdb;
create table t1 (id int primary key);
insert into t1 values(1),(2),(3),(4),(5);
创建增量备份1存放目录
mkdir -p /data/backup/0922/incr1
创建增量备份1
xtrabackup --user=root --password=Root#123 --backup --target-dir=/data/backup/0922/incr1 --incremental-basedir=/data/backup/0922/full_db
–incremental-basedir: 表示在某个备份的基础上进行增量备份

新增数据及创建增量备份2
新增数据
insert into testdb.t1 values(6),(7),(8),(9),(10);
创建增量备份2存放目录
mkdir -p /data/backup/0922/incr2
创建增量备份2
xtrabackup --user=root --password=Root#123 --backup --target-dir=/data/backup/0922/incr2 --incremental-basedir=/data/backup/0922/incr1

查看备份文件大小

模拟数据库故障
关闭mysql数据库
service mysql stop
删除datadir下的所有文件
cd /data/mysql/data
rm -rf *
删除所有binlog日志
cd /data/mysql/binlogs
rm -rf *
恢复数据库
1)准备恢复全量备份
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/0922/full_db
–prepare:表示为准备阶段
2)将增量备份1加载至全备中
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/0922/full_db --incremental-dir=/data/backup/0922/incr1
3)将增量备份2加载至全备中
xtrabackup --prepare --target-dir=/data/backup/0922/full_db --incremental-dir=/data/backup/0922/incr2

4)恢复数据库
xtrabackup --copy-back --target-dir=/data/backup/0922/full_db
–copy-back:将备份的数据copy至数据目录下(my.cnf参数文件中datadir配置)
5)调整数据及日志目录属主属组
chown mysql:mysql -R /data/mysql/data
chown mysql:mysql -R /data/mysql/binlogs/
6)启动数据库
service mysql start

7)检查数据是否完整
select count(*) from testdb.t1;
参考文档:
THE END

墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
服务官网:https://www.modb.pro/service

点击进入作者个人主页
本文分享自微信公众号 - 墨天轮(enmocs)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。