MySQL8.0备份工具之Xtrabackup

随着MySQL 8.0的推出,Percona公司也相继推出了percona-xtrabackup-8.0,而原来的2.4版本也将继续支持MySQL和Percona Server 5.6和5.7数据库。

由于MySQL 8.0在数据字典,重做日志和撤消日志中引入的更改与以前的版本不兼容,因此Percona XtraBackup 8.0 目前不支持8.0之前的版本。

本文主要记录下xtrabackup8.0与原来旧版本的不同和使用。

Usage: [xtrabackup [--defaults-file=#] --backup | xtrabackup [--defaults-file=#] --prepare] [OPTIONS]

--target-dir   destination directory 备份的目标目录。如果目录不存在,xtrabackup将创建它。如果目录确实存在且为空,则xtrabackup将成功;xtrabackup不会覆盖现有的文件;会在操作系统层面报错,文件存在。

--backup            take backup to target-dir 

--prepare           prepare a backup for starting mysql server on the backup 为启动备份上的mysql服务器准备一个备份。(类似innobackupex --apply-log)

--apply-log-only    此项较为重要。主要应用与增备,在常规备份中,执行两种操作以使数据库保持一致:从日志文件对数据文件重播已提交的事务,回滚未提交的事务。在准备备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,它们很可能在下一次增量备份中提交。您应该使用—apply-log-only选项来防止回滚阶段。

警告:如果您不使用—apply-log-only选项来防止回滚阶段,那么您的增量备份将是无用的。事务回滚后,无法应用进一步的增量备份。

--compress 该选项告诉xtrabackup使用指定的压缩算法压缩所有输出数据,包括事务日志文件和元数据文件。目前唯一支持的算法是quicklz。与--compress-threads配合使用。

--compact 通过跳过二级索引页创建一个紧凑的备份。

--compress-threads  此选项指定xtrabackup用于并行数据压缩的工作线程数量。该选项默认为1。并行压缩(压缩线程)可以与并行文件复制(并行)一起使用。例如,--parallel=4 --compress --compress-threads=2将创建4个I/O线程,读取数据并将其传输到2个压缩线程。

--copy-back 将先前备份目录中的所有文件复制到其原始位置。除非指定强制非空目录选项,否则此选项不会复制现有文件。与MariaDB的Mariabackup的一项copy-back类似,做的时候确保datadir目录为空,你可以把原目录改个名字,再创建一个新的目录。

--databases 此选项指定应该备份的数据库和表的列表,它支持database_name.table_name,比如只想备份test库下的su表,--databases=test.su。

--databases-exclude 排除基于名称的数据库,基本语法与--databases相同,不想备份的数据库或表。注意点!此选项优先级高于--databases。

--galera-info 该选项创建xtrabackup_galera_info文件,该文件包含备份时的本地节点状态。选项应该在执行Percona XtraDB集群备份时使用。

--incremental  该选项告诉xtrabackup创建增量备份。它被传递给xtrabackup子进程。指定此选项后,还可以指定--incremental-lsn或--incremental-basedir。如果两个选项都没有提供,则默认情况下将option——incremental-basedir传递给xtrabackup,设置为备份基本目录中的第一个时间戳备份目录。与原来旧版本--incremental类似

--slave-info 此选项在备份复制从属服务器时非常有用。它打印主服务器的二进制日志位置。它还将此信息作为更改主命令写入xtrabackup_slave_info文件。可以通过在这个备份上启动一个从服务器并发出一个CHANGE master命令来设置这个主服务器的新从服务器,该命令的二进制日志位置保存在xtrabackup_slave_info文件中。

全量备份:

xtrabackup --defaults-file=/etc/my.cnf  --user='xx' --password='xx' -S /tmp/mysql.sock --compress --compress-threads=2 --backup --target-dir=/opt/mydump/

压缩模式需要先安装Percona自研的qpress压缩工具。

yum install  https://repo.percona.com/yum/percona-release-latest.noarch.rpm  
yum install qpress -y

可以看一下备份出来的内容,如下图:

都是以.qp为结尾的,不可读,也算是另一种加密了。

解压

 for bf in `find . -iname "*.qp"`; do qpress -d $bf $(dirname $bf) && rm -f $bf; done

恢复备份期间增量数据(这一步类似innobackupex --apply-log)

xtrabackup  --prepare --target-dir=/opt/mydump/

恢复

① 关闭mysqld进程

② 确保datadir目录为空,可以把原来的数据目录mv到其他地方

③ 恢复

# xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/opt/mydump/

④ 更改目录属性

chown mysql:mysql -R /data/mysql

⑤ 启动mysqld进程

增备(先建立一个全备):

xtrabackup --backup --target-dir=/opt/mydump

然后基于这个全备去做增备:

xtrabackup --backup --target-dir=/opt/incr1 --incremental-basedir=/opt/mydump

第二个增备:

xtrabackup --backup --target-dir=/opt/incr2  --incremental-basedir=/opt/incr1

应用第一个增备到全备:

xtrabackup --prepare --apply-log-only --target-dir=/opt/mydump --incremental-dir=/opt/incr1

应用第二个增备到全备(这个时候就不用加--apply-log-only了,至于理由与旧版本的增备相同):

xtrabackup --prepare --target-dir=/opt/mydump --incremental-dir=/opt/incr2

恢复过程与全备相同。

https://www.linuxidc.com/Linux/2016-08/134535.htm

https://www.percona.com/doc/percona-xtrabackup/2.4/howtos/recipes_ibkx_compressed.html

 

原文地址:https://www.cnblogs.com/guoweilf/p/12053173.html