MYSQL 8.0 XTRABACKUP 备份压缩与部分表恢复

2021-01-02 00:00:00 参数 文件 备份 压缩 恢复




MYSQL 8.0后,XTRABACKUP 的参数有哪些变化,如果是通过XTRABACKUP 来备份那些参数的意义在哪里,是不是需要进行调整


1 compress

在XTRABACKUP 进行文件的备份时,是有一个compress参数的,通过这个参数可以将INNODB 格式的数据进行压缩,他支持的压缩的逻辑是quicklz而压缩完毕的数据具有qpress格式,也就是说备份的文件的后缀是。qp



从上图两个备份方式的比较上为压缩备份,下为非压缩备份,可以看到压缩后的备份的确是某些文件缩减了10倍。 

实际上如果遇到了大的文件,会产生一个问题就是压缩的时候会消耗CPU,消耗CPU,那么如何分配这些CPU 给我们的压缩环境,就变得重要了,如果你备份的时候在一个CPU 极度紧缺的时候,那么就不能分配过多的CPU在备份的压缩上。

--compress-threads  这个参数就是要保证你到底用多少的CPU 来进行数据的压缩


例如


那么估计会有人问,那你压缩完毕了,我怎么恢复数据库,是不是需要一个解压缩的过程,这个过程到底在哪里


首先要知道压缩简单,解压难,你首先需要安装 qpress 否则是会报

的问题

1 先安装新的 percona的yum 源

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

2 yum -y install qpress


为什么要安装qpress 主要的原因在于我们需要在prepare 的之前先对相关的文件解压缩,否则无法进行prepare 


压缩的时候可以进行多线程,那么解压缩的时候自然也可以进行多线程并行

xtrabackup  --decompress --parallel=4 --target-dir=/data/backup1

那么有人问,那么XTRABACKUP 可以进行单表的备份和恢复吗,答案是可以,但是前提是,如果你的表的大小不超过百兆,那么mysqldump还是不错的选择,另外也可以使用 mydumper来完成,而不是xtrabackup


下面我们看看

1 前提条件是你的mysql 必须是开启 innodb_file_per_table的

2 备份的方式也可以是1个表 一群表,或者一个数据库中的一组表

3 还原方没有同名的表


xtrabackup -usys -p1234.Com --socket=/data/mysql/mysql.sock --backup --target-dir=/data/backup1 --tables="test_1"


从上图可以看到实际上在仅仅备份一个表的时候,大部分表的拷贝都是被跳过的。

那么在恢复的过程中,我们怎么进行相关的操作。还原的过程中,我们需要使用--export参数来对相关的表进行输出

xtrabackup --prepare --export --target-dir=/data/backup1


具体的操作流程


1  备份时只备份需要导出的表


xtrabackup -usys -p1234.Com --socket=/data/mysql/mysql.sock --backup --target-dir=/data/backup1 --tables="test_1"


2 在备份后对表进行export 

xtrabackup --prepare --export --target-dir=/data/backup1


3 在需要恢复表的数据库上建立与表同样的表名和结构的数据表


4  然后直接  ALTER table 表名 discard tablespace;

将原有的表的表空间卸载


5  将备份文件夹下的表拷贝到目的数据库的文件夹下


6  ALTER TABLE 表名 import tablespace;


表整体恢复完成




相关文章