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:

目前评论:6   其中:访客  4   博主  2

    • 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 朱双印 Admin

              @像风一样 客官是风一样的男子嘛~~~嘿嘿,常来捧场呦~~~亲~~~

            • avatar sidy 0

              很不错的东西。 :wink:

                • avatar 朱双印 Admin

                  @sidy 客官的肯定是我前进的动力,常来捧场~~~亲~~~