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

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

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

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

并行备份

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

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

Shell

innobackupex -p123123 --parallel=8 /backup

1

innobackupex -p123123 --parallel=8 /backup

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

节流备份

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

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

Shell

innobackupex -p123123 --throttle=200 /backup

1

innobackupex -p123123 --throttle=200 /backup

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

压缩备份

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

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

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

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

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

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

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

压缩备份的示例如下:

Shell

innobackupex -p123123 --compress /backup

1

innobackupex -p123123 --compress /backup

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

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

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

Shell

innobackupex -p123123 --compress --compress-threads=8 /backup

1

innobackupex -p123123 --compress --compress-threads=8 /backup

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

Shell

innobackupex -p123123 --parallel=8 --compress --compress-threads=8 /backup

1

innobackupex -p123123 --parallel=8 --compress --compress-threads=8 /backup

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

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

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

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

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

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

Shell

wget http://www.quicklz.com/qpress-11-linux-x64.tar

1

wget http://www.quicklz.com/qpress-11-linux-x64.tar

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

Shell

# ls

qpress

# mv qpress /usr/local/bin/

1

2

3

# ls

qpress

# mv qpress /usr/local/bin/

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

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

Shell

qpress -d test.qp ./

1

qpress -d test.qp ./

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

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

Shell

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

1

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

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

使用示例如下

Shell

innobackupex --decompress /backup/2013-08-01_11-24-04/

1

innobackupex --decompress /backup/2013-08-01_11-24-04/

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

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

Shell

innobackupex --parallel=4 --decompress 2017-04-11_11-50-31/

1

innobackupex --parallel=4 --decompress 2017-04-11_11-50-31/

上述命令表示同时开启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目录,但是并不能在对应目录下生成备份文件。

Shell

innobackupex -p123123 --stream=tar /backup

1

innobackupex -p123123 --stream=tar /backup

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

Shell

innobackupex -p123123 --stream=tar /backup > /backup/back.tar

1

innobackupex -p123123 --stream=tar /backup > /backup/back.tar

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

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

Shell

tar -ixvf /backup/back.tar

1

tar -ixvf /backup/back.tar

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

Shell

innobackupex -p123123 --stream=tar /backup | gzip > /backup/fullback.tar.gz

1

innobackupex -p123123 --stream=tar /backup | gzip > /backup/fullback.tar.gz

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

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

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

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

Shell

innobackupex -p123123 --stream=tar /tmp | ssh root@192.168.1.120 \ "cat - > /backup/bak.tar"

1

innobackupex -p123123 --stream=tar /tmp | ssh root@192.168.1.120 \ "cat - > /backup/bak.tar"

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

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

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

ssh-keygen

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

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

Shell

innobackupex -p123123 --stream=tar /tmp | ssh root@192.168.1.120 \ "cat - > /backup/bak.tar"

1

innobackupex -p123123 --stream=tar /tmp | ssh root@192.168.1.120 \ "cat - > /backup/bak.tar"

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

Shell

innobackupex -p123123 --stream=tar /tmp | ssh root@192.168.1.120 \ "gzip > /backup/dateFullBak.tar.gz";

1

innobackupex -p123123 --stream=tar /tmp | ssh root@192.168.1.120 \ "gzip > /backup/dateFullBak.tar.gz";

xbstream格式流备份

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

Shell

innobackupex -p123123 --stream=xbstream ./ > /backup/fullbak.xbstream

1

innobackupex -p123123 --stream=xbstream ./ > /backup/fullbak.xbstream

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

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

Shell

innobackupex -p123123 --stream=xbstream --compress ./ > /backup/fullbak.xbstream

1

innobackupex -p123123 --stream=xbstream --compress ./ > /backup/fullbak.xbstream

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

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

Shell

xbstream -x

1

xbstream -x

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

Shell

xbstream -x -C /backup/zsythink/

1

xbstream -x -C /backup/zsythink/

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

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

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

Shell

innobackupex -p123123 --stream=xbstream --compress /tmp | ssh root@192.168.1.120 "xbstream -x -C /backup/datafull"

1

innobackupex -p123123 --stream=xbstream --compress /tmp | ssh root@192.168.1.120 "xbstream -x -C /backup/datafull"

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

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

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

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

mysql xtrabackup_mysql备份相关推荐

  1. mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程

    原标题:Navicat for MySQL 数据备份教程 一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击.硬件故障.人为错误.电力中断等都会照成数据丢失.备份功能为防 ...

  2. centos下mysql常用的三种备份方法_centos下mysql自动备份(全量)

    1.新建mysql的备份目录mkdir -p path/mysql/backup/ 2.新建备份脚本vi path/mysql/backup/backup.sh #!/bin/bash backupd ...

  3. javaweb实现mysql备份功能_java web 实现mysql 数据库备份、恢复

    如题,由于项目需要,研究并实现了java web的 mysql数据库的备份.下载.恢复功能,中间遇到一些问题,耗费了不少时间,下面让我一一道来: 背景介绍: window 7系统 mysql 5.7 ...

  4. MySQL Xtrabackup备份和恢复

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...

  5. mysql数据库备份还原

    首先进入cmd.exe 然后进入进入mysql C:\Windows\SysWOW64>cd C:\mysql\binC:\mysql\bin>mysql -u root -p 创建数据库 ...

  6. mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...

    扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库  innobackupex  ...

  7. mysql用户管理,常用sql语句,mysql数据库备份恢复

    2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...

  8. MySQL数据库备份命令

    原文参考:MySQL数据库备份的命令 - 司南 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql ...

  9. mysql mysqlhotcopy_MySQL备份之mysqlhotcopy与注意事项

    此文章主要向大家介绍的是MySQL备份之mysqlhotcopy与其在实际操作中应注意事项的描述,我们大家都知道实现MySQL数据库备份的常用方法有三个,但是我们今天主要向大家介绍的是其中的一个比较好 ...

最新文章

  1. 与两位主席复盘IJCAI,今年得失几何?
  2. day16-Dom样式操作
  3. 合并底稿分析,数据线索追溯
  4. 中判断字符串是否为空_java中的数字以及如何判断字符串是不是数字
  5. python3默认编码标准是_python3 编码
  6. MySQL主从原理,基于快速学习一门技术的3种方式
  7. C++变量初始化问题
  8. java开发简历编写_编写Java开发人员简历的完整指南
  9. ISIS仿真中Buzzer蜂鸣器不发声
  10. keras深度学习之猫狗分类二(数据增强)
  11. 云呐-工单管理制度及流程,工单管理规范
  12. ZOOM 无法登入怎么办
  13. 6.python输入整数年份,判断对应整数年份是否为闰年并输出结果
  14. 安装Ubuntu系统时硬盘分区最合理的方法
  15. windows下格式化内存卡
  16. js对象扁平化:Javascript对象进行扁平化处理
  17. DAMO在启动或初始化时可能会挂起
  18. windows windows计划任务访问网络存储NAS的问题
  19. 计算机专业电脑需要显卡吗,组装电脑要不要配独立显卡?
  20. 高精度反正切函数的实现

热门文章

  1. 在REUSE_ALV_GRID_DISPLAY_LVC后获取GRID
  2. [转]undefined reference to 问题解决方法
  3. Nginx配置同一个域名同时支持http与https两种方式访问
  4. linux的/dev内容介绍
  5. Android NDK JNI C++ 3
  6. [转]HTTP协议之状态码详解
  7. 面试百题066——颠倒栈
  8. Android提高篇内容整理
  9. c语言任意位数逆序数,C语言求助!一个三位数的逆序数,总是编不对
  10. Hey,微信广告收到了吗?你哪个阶层的?