MYSQL 8.0 XTRABACKUP 备份压缩与部分表恢复
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;
表整体恢复完成
相关文章