mysql xtrabackup_mysql备份
在本博客中,"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备份相关推荐
- mysql备份psb文件怎么打开_Navicat for MySQL 数据备份教程
原标题:Navicat for MySQL 数据备份教程 一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击.硬件故障.人为错误.电力中断等都会照成数据丢失.备份功能为防 ...
- centos下mysql常用的三种备份方法_centos下mysql自动备份(全量)
1.新建mysql的备份目录mkdir -p path/mysql/backup/ 2.新建备份脚本vi path/mysql/backup/backup.sh #!/bin/bash backupd ...
- javaweb实现mysql备份功能_java web 实现mysql 数据库备份、恢复
如题,由于项目需要,研究并实现了java web的 mysql数据库的备份.下载.恢复功能,中间遇到一些问题,耗费了不少时间,下面让我一一道来: 背景介绍: window 7系统 mysql 5.7 ...
- MySQL Xtrabackup备份和恢复
简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...
- mysql数据库备份还原
首先进入cmd.exe 然后进入进入mysql C:\Windows\SysWOW64>cd C:\mysql\binC:\mysql\bin>mysql -u root -p 创建数据库 ...
- mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...
扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库 innobackupex ...
- mysql用户管理,常用sql语句,mysql数据库备份恢复
2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...
- MySQL数据库备份命令
原文参考:MySQL数据库备份的命令 - 司南 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql ...
- mysql mysqlhotcopy_MySQL备份之mysqlhotcopy与注意事项
此文章主要向大家介绍的是MySQL备份之mysqlhotcopy与其在实际操作中应注意事项的描述,我们大家都知道实现MySQL数据库备份的常用方法有三个,但是我们今天主要向大家介绍的是其中的一个比较好 ...
最新文章
- 与两位主席复盘IJCAI,今年得失几何?
- day16-Dom样式操作
- 合并底稿分析,数据线索追溯
- 中判断字符串是否为空_java中的数字以及如何判断字符串是不是数字
- python3默认编码标准是_python3 编码
- MySQL主从原理,基于快速学习一门技术的3种方式
- C++变量初始化问题
- java开发简历编写_编写Java开发人员简历的完整指南
- ISIS仿真中Buzzer蜂鸣器不发声
- keras深度学习之猫狗分类二(数据增强)
- 云呐-工单管理制度及流程,工单管理规范
- ZOOM 无法登入怎么办
- 6.python输入整数年份,判断对应整数年份是否为闰年并输出结果
- 安装Ubuntu系统时硬盘分区最合理的方法
- windows下格式化内存卡
- js对象扁平化:Javascript对象进行扁平化处理
- DAMO在启动或初始化时可能会挂起
- windows windows计划任务访问网络存储NAS的问题
- 计算机专业电脑需要显卡吗,组装电脑要不要配独立显卡?
- 高精度反正切函数的实现
热门文章
- 在REUSE_ALV_GRID_DISPLAY_LVC后获取GRID
- [转]undefined reference to 问题解决方法
- Nginx配置同一个域名同时支持http与https两种方式访问
- linux的/dev内容介绍
- Android NDK JNI C++ 3
- [转]HTTP协议之状态码详解
- 面试百题066——颠倒栈
- Android提高篇内容整理
- c语言任意位数逆序数,C语言求助!一个三位数的逆序数,总是编不对
- Hey,微信广告收到了吗?你哪个阶层的?