mysql/mariadb知识点总结(32):xtrabackup常用备份功能与选项

  • A+
所属分类:Mysql  数据库

在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。

mysql文章列表直达链接:mysql知识点总结

mysql/mariadb知识点总结(32):xtrabackup常用备份功能与选项

之前的文章已经总结了xtrabackup的相关原理,并且总结了怎样使用xtrabackup对InnoDB数据进行全量备份,增量备份,差量备份。

 

这篇文章总结了xtrabackup的其他一些常用的备份选项。

 

并行备份

xtrabackup支持并行备份,就是备份时同时开启多个线程,并行的进行备份操作,这样可以加快备份完成的速度,但是会增大IO,默认情况下之开启一个进程进行备份。

使用--parallel选项指定并行备份的线程数量,示例如下

备份数据量较大时使用--parallel选项可以加快备份完成的速度。

 

节流备份

xtrabackup支持节流备份,节流备份的意思就是节省IO操作的备份,当数据库服务器上已经没有过多的空闲IO时,我们可以使用节流备份。

使用--throttle选项限制每秒钟操作IO的次数,示例如下

注意:--throttle选项只适用于备份阶段,不能用于prepare阶段与copy-back阶段。

 

压缩备份

xtrabackup支持压缩功能,使用压缩功能可以在备份时直接生成经过压缩的备份。

有两种方法直接生成经过压缩的备份。

方法一:使用--compress选项进行压缩。

方法二:使用流的方式进行备份,将备份的tar格式的流重定向到其他压缩软件进行压缩。

 

此处,我们只讨论方法一,因为方法二涉及到流备份,方法二会在下面的流备份章节总结。

 

在使用xtrabackup进行备份时,使用--compress选项可以对备份数据进行压缩,所有备份数据都会被压缩,包括事务日志和元数据文件。

使用--compress选项对备份进行压缩时,使用的压缩算法为"quicklz",压缩出的文件的后缀名为".qp"。

 

压缩备份的示例如下:

 

没错,就是这么简单,只需要添加--compress选项皆可,此时,我们对比一下不压缩时与压缩后的备份的大小。

mysql/mariadb知识点总结(32):xtrabackup常用备份功能与选项

没有压缩的备份大小为56M,压缩后的备份大小为5M,效果还是非常可观的。

 

在对数据进行压缩的同时,还可以使用--compress-threads=#选项可以指定压缩线程的数量,加快压缩的速度,示例如下

上例中指定了压缩数据的线程数量为8,当然,我们可以同时使用--parallel选项与 --compress-threads选项,示例如下

使用上例命令进行备份时,将会有8个IO线程备份数据,并且将数据输送给8个线程进行压缩。

 

没错,备份经过压缩以后,在还原备份数据之前,则需要先进行解压操作。

进入压缩后的备份目录,可以发现,除了xtrabackup_checkpoints文件以外,其他文件都被压缩成了以".qp"结尾的压缩文件。

之前已经说过,使用--compress选项压缩备份文件时,使用的压缩算法为"quicklz","quicklz"也是一个压缩库,"quicklz"官网号称自己是全世界最快的压缩库,官网如下

http://www.quicklz.com/

qpress就是quicklz的压缩软件,如果我们想要解压备份文件中以".qp"结尾的文件,则需要安装"qpress"。

 

那么,我们就从quicklz官网下载qpress

 

解压后,即可得到qpress的二进制文件,将此命令路径配置到PATH环境变量或者移动到命令目录下。

 

因为在备份时使用了--compress选项,所以经过压缩后的备份文件需要qpress进行解压。

使用qpress的-d选项进行解压操作,示例如下

上例表示将test.qp压缩文件解压到当前目录中

 

但是备份目录中的qp压缩文件太多了,我们不可能手动的去解压每个文件,所以,可在压缩备份目录下使用如下命令,循环的解压每个文件,并且在文件解压后删除原来的压缩文件,只保留解压后的的数据文件,使用root用户执行如下命令时rm命令可添加上-f选项。

 

除了使用上述循环的方式解压,我们还能够通过一个选项解压,--decompress选项,使用--decompress选项可以对压缩备份的目录进行解压操作,不过,即使是使用--decompress选项进行解压操作,也仍然需要安装qpress,所以,如果在压缩备份时使用了--compress选项,那么解压备份的前提就是安装了qpress。

使用示例如下

上例中的/backup/2013-08-01_11-24-04/目录为压缩备份目录。

 

使用--decompress选项时,可以配合--parallel选项,加速解压操作的进度。

上述命令表示同时开启4个线程进行解压操作。

 

2.2的官方用户手册中有这样一句话。

This option will remove the original compressed files and leave the uncompressed ones in the same location.

也就是说,官方声称,使用--decomporess可以解压压缩文件,并且在操作完成后只保留解压过的文件,但是我在使用此选项时,原来的压缩文件在解压后并没有被删除。

虽然这些压缩文件没有被删除,但是它们并不会影响我们的"prepare"工作,而且,经过测试,在copy-back的步骤中,xtrabackup不会将这些压缩文件拷贝至mysql的数据目录中,所以,这应该不是什么大问题。

 

总之,如果在备份时使用了--compress选项,那么需要先解压才能进行apply-log与copy-back操作,解压时必须安装了qpress。

 

流备份

xtrabackup支持流式备份,即将备份数据以数据流的方式输出。

 

使用--stream选项则可以实现流备份,xtrabackup支持两种格式的流,tar格式的流与xbstream格式的流,也就是说,--stream选项有两个可用值,tar或xbstream

两种格式的流备份我们一一总结。

 

tar格式流备份

使用如下命令,会将tar格式的流当做标准输出输出到屏幕上,虽然我们指定了/backup目录,但是并不能在对应目录下生成备份文件。

所以,我们需要将上述tar格式的流进行重定向,使用如下命令进行tar格式的流备份。

上述命令表示将tar格式的流数据备份到/backup/back.tar中,上述命令中--stream=tar后面的路径不可省,但是其路径可以是任意路径,与备份的tar包所在的路径没有任何关系,但是此路径不能省略,省略后报如下错误。

mysql/mariadb知识点总结(32):xtrabackup常用备份功能与选项

 

注意:官方文档中声明,在解压tar格式的流备份时,需要使用tar命令的-i选项,示例如下

 

我们也可以在生成流备份文件时,进行压缩,示例如下

上例表示将tar格式的留备份进行gzip压缩,没错,你可以将gzip换成其他常用的压缩软件进行压缩。

使用上述命令已经体现出了流备份的优点,我们不用先生成备份,再通特定的压缩软件对备份进行压缩,一步就完成了备份归档压缩的步骤。

同理,解压上述/backup/fullback.tar.gz文件时需要使用tar命令的-i选项。

 

我们也可以通过流备份将数据直接备份到远程主机,不占用本机的磁盘空间,示例命令如下。

上述命令表示将备份流直接备份到远程主机192.168.1.120上。

注意:将流备份备份到远程主机有一个前提条件,就是存储备份的目标主机需要对当前主机ssh信任,也就是说,本机通过ssh连接到远程目标主机时,不需要输入对应的密码,否则在使用上述命令进行备份时,备份操作会一直执行在如下图中的操作,导致无法备份成功。

mysql/mariadb知识点总结(32):xtrabackup常用备份功能与选项

 

所以,在执行远程备份命令之前,我们要先生成当前主机的公钥,并让远程主机对当前主机信任。

ssh-keygen

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.120

 

确定无误后,执行如下命令即可实现将流备份直接备份到远程主机。

 

当然,我们也可以在流备份到远程主机时对备份进行压缩,示例命令如下。

  

xbstream格式流备份

有了之前tar格式流备份的基础以后,再看xbstream备份就容易许多,我们只要将之前--stream选项的流格式设置为xbstream即可,示例如下

我们将xbstream格式的数据流重定向到了/backup/fullbak.xbstream文件中。

 

xbstream流备份也可以在备份时直接进行压缩,只不过,xbstream格式的流是使用--compress选项进行压缩,--compress选项上文已经总结过,此处不再赘述

 

xbstream格式的流备份文件已经生成,那么当我们需要通过这些备份文件恢复数据时,我们该怎样将这些xbstream格式的流备份释放呢?

我们需要使用xbstream命令释放xbstream格式的流备份文件,在安装xtrabackup时就已经安装了xbstream命令,使用示例如下。

上述命令表示将当前目录中的bakup.xbstream备份文件通过xbstream命令进行释放,-x选项表示释放xbstream流备份文件到当前目录,如果想要释放xbstream流备份文件到指定的目录,可以使用-C选项,示例如下

上述命令表示将当前目录中的fullbak.xbstream流备份文件释放到/backup/zsythink/目录中。

 

如果在生成xbstream格式的流备份时使用了--compress选项进行了压缩,那么释放后的xbstream流备份为qpress格式的压缩文件,还需要使用qpress进行解压,具体方法在上文中已经描述过,此处不再赘述。

 

我们也可以将xbstream流直接备份到远程主机上,示例如下。

注意,上述命令表示将xbstream流直接备份到 192.168.1.120 中,远程主机对应的备份路径必须存在,否则备份时可能会出现如下错误

mysql/mariadb知识点总结(32):xtrabackup常用备份功能与选项

注意:将流备份备份到远程主机有一个前提条件,就是存储备份的目标主机需要对当前主机ssh信任,也就是说,本机通过ssh连接到远程目标主机时,不需要输入对应的密码,否则在使用上述命令进行备份时,备份操作会一直执行在如下图中的操作,导致无法备份成功。

上述注意点在tar格式的流备份总结中已经提到过,实现信任的步骤是相同的,此处不再赘述。

 

关于xtrabackup的相关总结暂时就到这里,希望这几篇文章能对你有所帮助。

 

 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  5   博主  0

    • avatar lyvivian 0

      innobackupex 2.4 版本里有明确说明,不会自动删除压缩文件,必须自己手动删除.
      –decompress
      Decompresses all files with the .qp extension in a backup previously made with the innobackupex –compress option. The innobackupex –parallel option will allow multiple
      files to be decrypted and/or decompressed simultaneously. In order to decompress, the qpress utility MUST be installed and accessible within the path. Percona XtraBackup
      doesn’t automatically remove the compressed files. In order to clean up the backup directory users should remove the *.qp files manually.

      • avatar cherry 0

        解压
        #innobackupex –decompress 2018-06-20_09-27-43/
        删除qp文件
        #find 2018-06-20_09-27-43/ -type f -name “*.qp” -exec rm -f {} \;

        • avatar YK 1

          对我的帮助太大了,发自内心的感谢.尤其是有详细明了的例子,这对新手来说太重要了.

          • avatar 像风一样 0

            写的不错,很详细,感谢楼主分享

            • avatar sidy 0

              很不错的东西。 :wink: