Percona XtraBackup 关于 MySQL备份还原的详细测试
一. Percona XtraBackup 的优点。
(1)无需停止数据库进行InnoDB热备;
(2)增量备份MySQL;
(3)流压缩传输到其它服务器;
(4)在线移动表;
(5)能够比较容易地创建主从同步;
(6)备份MySQL时不会增大服务器负载。
二. Percona XtraBackup 工具集组成
在旧版本中,Percona XtraBackup 工具集里主要包含两个程序:innobackupex 和 xtrabackup。
xtrabackup是C/C++编译的二进制程序,用来备份InnoDB的,并不能备份非InnoDB表,它在内部实现了对InnoDB的热备份。
innobackupex由perl脚本编写,是对xtrabackup的封装,通过调用xtrabackup命令来备份InnoDB表,通过调用mysqldump等命令来实现对非InnoDB表的备份,并且会和MySQL数据库发送命令交互,例如获取Binlog位点、添加锁操作。
因为我们公司,大量使用 innodbbackupex 备份还原,所以,本文的讲解测试仍是以innodbbackupex为主。
三. innodbbackupex常用的参数选项
参数选项 | 作用描述 | 备注 |
--host | 指定数据库实例的IP地址。 | 备份阶段 |
--port | 连接数据库实例的端口号。 | 备份阶段 |
--user | 备份时连接数据库实例/数据库的用户名。 | 备份阶段 |
--password | 连接所用账号的密码。 | 备份阶段 |
--copy-back | 将准备好的备份文件从备份目录复制到原始位置,其原始位置目录必须为空,否则报错(除非指定--force-non-empty-directories选项)。 | 恢复阶段 |
--incremental | 该选项表示创建增量备份,而不是全量备份。 | 备份阶段 |
--incremental-basedir | 该选项接受一个字符串参数,表示包含作为增量备份基本数据集的完整备份的目录。与--incremental一起使用。 | 备份阶段 |
--incremental-dir | 该选项接受一个字符串参数,表示增量备份与完整备份的目录,以进行新的完整备份。与--incremental一起使用。 | 备份阶段 |
--redo-only | 在prepare阶段,完整备份合并除最后一个增量之外的所有增量时,使用该选项。迫使innobackupex跳过“回滚”阶段,只做一次“重做”。如果已经在全量备份上重放了提交的事务并回滚了未提交的事务,则无法在此备份上添加增量。同样,如果在增量备份上执行,则无法添加其余的增量备份。 | Prepare阶段 |
--incremental-lsn | 增量备份是基于LSN来完成的,所以,增量备份也可以指定LSN值进行。 | 备份阶段 |
--apply-log | 在创建备份后,备份数据其实处于不可用状态。因为在redo log中可能存在未提交的事务和已提交的事务,需要通过准备阶段来使备份数据达到一致状态。通过此阶段,备份数据就可以用来恢复了。在准备阶段,需要指定的参数选项就包含apply-log。 | |
--socket | 该选项表示mysql.sock所在位置,以便备份进程登录mysql。在MySQL多实例场景下,需指明。 | |
四. 安装
这个版本是 Percona XtraBackup 2.4 版本。
Step 1 :下载执行文件
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
step 2 :解压执行文件
tar -xvf Percona-XtraBackup-2.4.-ra467167cdd4-el6-x86_64-bundle.tar
step 3:安装
yum install percona-xtrabackup--2.4.-.el6.x86_64.rpm –y
step 4 安装验证
查看 可执行文件
which xtrabackup
版本检查
xtrabackup --version
五. 全量备份与全量恢复
Step 1 环境介绍及准备
测试环境:在一台服务器上开启2个实例,一个是3306,另一个是3307.测试的基本步骤是将3306实例上的数据库备份、然后还原到3306实例中。
用来测试的数据库为Test_Xtrabackup
step 2 全量备份
innobackupex --port --socket /tmp/mysql_3306.sock --user=root --password=输入自己的密码 /data/backup/full
因为测试方便使用了 root 账号,进而不可以输入对应 --host参数。
因为测试服务器上,安装了多实例,所以输入了 --socket 参数。
生成的全量备份文件会存储在一个以备份时间命名的子目录下。
step 3 Prepare 阶段
在创建备份后,备份数据其实处于不可用状态。因为在redo log中可能存在未提交的事务和已经提交的事务,需要通过准备阶段来使备份数据达到一致的状态。通过此阶段,备份数据就可以用来恢复了。
在准备阶段,需要指定选项 --apply-log 和备份文档路径。
innobackupex --apply-log /data/backup/full/--19_10--
step 4 还原环境的准备
我们打算将数据库还原到同一台服务器上的3307 端口的mysql实例中。
先登入看下。
测试需要 关闭3307 实例
将实例对应的数据文档清空(/data/mysql3307/data)
step 5 恢复阶段
在Prepare阶段过后,如果需要用备份数据来恢复数据库,则只需要指定--copy-back 和备份数据所在目录即可。
innobackupex --datadir=/data/mysql3307/data --copy-back /data/backup/full/--19_10--
innobackupex 将所有的数据相关文件复制到服务器中的datadir目录,该目录有my.cnf文件中的datadir选项指定。因为是多实例,在此直接指定。
step 6 修改文件的所有权
复制完成后,文件属性不会改变。在大多数的情况下,在启动MySQL数据库之前,需要修改文件的所有权。
chown -R mysql:mysql /data/mysql3307/data
step 7 开启恢复后的实例,数据验证
以上截图说明 3306 上的数据已恢复至3307 实例上。
六. 增量备份与恢复的测试
1. 备份阶段
环境准备,在完整备份前,创建了一个 表 T_full_table;并向此表插入了一笔数据,如下图所示:
增量备份基于全量备份,所以需要创建一个全量备份。全量备份的命令如下:
innobackupex --port --socket /tmp/mysql_3306.sock --user=root --password=你的密码 /data/backup/full
全量备份后生成的(时间子)目录为 2019-04-19_21-28-32,这个目录会在第一次增量备份是用到,incremental-basedir 选项参数需要细化到这一层,否则报错。意思是找不到xtrabackup_checkpoints文件。
全量备份后,向表中insert 2 笔 数据,如下:
第一个增量备份
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/full/2019-04-19_21-28-32 /data/backup/incremental
增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-30-11
第一次增量备份后,继续insert 2笔数据
第二个增量备份(我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir设置为上一次增量备份的目录即可。即:增量备份可以基于以前的增量备份完成数据备份。)
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-30-11 /data/backup/incremental
第二次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-35-33
再次插入2笔数据,用来验证第三次增量备份
第三个增量备份
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-35-33 /data/backup/incremental
第三次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-38-16
再次插入2笔验证数据,用来验证第四次增量备份。
生成第四个增量备份
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-38-16 /data/backup/incremental
第四次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-40-02
最后一次插入2笔验证数据
我们希望还原后的数据库是 刚刚作为第三次完整增量备份的数据库状态。
(此时T_full_table 表的数据,应该为 1(全量),2,3 (一增),21,22 (二赠),31,32 (三赠))
2. 增量恢复的Prepare阶段
1) 在全量备份上执行
innobackupex --apply-log --redo-only /data/backup/full/2019-04-19_21-28-32
2) 在第一个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-30-11,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)
innobackupex --apply-log --redo-only --incremental-dir=/data/backup/incremental/2019-04-19_21-30-11 /data/backup/full/2019-04-19_21-28-32
3) 在第二个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-35-33,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)
innobackupex --apply-log --redo-only --incremental-dir=/data/backup/incremental/--19_21-- /data/backup/full/--19_21--
4) 在第二个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-38-16 ,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)
innobackupex --apply-log --incremental-dir=/data/backup/incremental/--19_21-- /data/backup/full/--19_21--
3. 增量备份的恢复阶段
通过prepare阶段,base 目录包含了所有数据。在恢复时,只需要通过以下操作即可。
innobackupex --datadir=/data/mysql3307/data --copy-back /data/backup/full/--19_21--
在数据库实例启动前,需要修改文件的所有权,执行指令如下
chown -R mysql:mysql /data/mysql3307/data
4. 开启实例,进行验证
恢复后的数据,正是我们想要的数据,测试到达了预期效果。
注:
现在xtrabackup版本升级到了2.4,相比之前的2.1有了比较大的变化:innobackupex
功能全部集成到 xtrabackup
里面,只有一个 binary,另外为了使用上的兼容考虑,innobackupex
作为 xtrabackup
的一个软链,即xtrabackup现在支持非Innodb表备份,并且Innobackupex在下一版本中移除,建议通过xtrabackup替换innobackupex。
-----本文部分内容参考梳理于网络知识,仅为笔记,在此原创作者感谢!
Percona XtraBackup 关于 MySQL备份还原的详细测试的更多相关文章
- 基于xtrabackup实现mysql备份还原
简介 Xtrabackup2.2版之前包括4个可执行文件: innobackupex: Perl 脚本 xtrabackup: C/C++ 编译的二进制 xbstream: 支持并发写的流文件格式 x ...
- 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复
1.安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒.) 1 2 3 4 5 6 7 8 wget https://www.percona.com/downloads/percona-rele ...
- 使用第三方工具Xtrabackup进行MySQL备份
使用Xtrabackup进行MySQL备份: 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtr ...
- (4.5)mysql备份还原——深入解析二进制日志(1)binlog的3种工作模式与配置
(4.5)mysql备份还原——深入解析二进制日志(binlog) 关键词:二进制日志,binlog日志 0.建议 (1)不建议随便去修改binlog格式(数据库级别) (2)binlog日志的清理 ...
- (4.3)mysql备份还原——mysql备份策略
(4.3)mysql备份还原——mysql备份策略 1.指定备份策略时需要考虑的点 [1.1]备份周期:2次备份间隔时长 [1.2]备份方式:在备份周期中,使用什么备份方式.备份模式 [1.3]实现方 ...
- 使用Percona Xtrabackup创建MySQL slave库
一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...
- (4.8)mysql备份还原——binlog查看工具之show binlog的使用
(4.8)mysql备份还原——binlog查看工具之mysqlbinlog及show binlog的使用 关键词:show binlog,mysql binlog查看,二进制文件查看,binlog查 ...
- (4.1)mysql备份还原——mysql常见故障
(4.1)mysql备份还原——mysql常见故障 1.常见故障类型 在数据库环境中,常见故障类型: 语句失败,用户进程失败,用户错误 实例失败,介质故障,网络故障 其中最严重的故障主要是用户错误和介 ...
- mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用
目录 xtrabackup 特点 备份生成的相关文件 xtrabackup 安装 xtrabackup 用法 1 备份 2 预备份 3 还原 4 其他 还原注意事项 xtrabackup实现完全备份及 ...
随机推荐
- 初识函数库libpcap
由于工作上的需要,最近简单学习了抓包函数库libpcap,顺便记下笔记,方便以后查看 一.libpcap简介 libpcap(Packet Capture Library),即数据包捕获函数库, ...
- 使用SimHash进行海量文本去重[转载]
阅读目录 1. SimHash与传统hash函数的区别 2. SimHash算法思想 3. SimHash流程实现 4. SimHash签名距离计算 5. SimHash存储和索引 6. SimHas ...
- shell 中各种括号的作用()、(())、[]、[[]]、{}
一.小括号,圆括号 () 1.单小括号 () 命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...
- mysql left join 左连接查询关联n多张表
left join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不关联的则不显示.关键字为left join on. **基本用法如下: select table a left ...
- Collection集合详解
/*Collection--List:元素是有序的,元素可以重复.因为该集合体系有索引. ---ArrayList;底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删很慢.线程不同步 --- ...
- 如何通过织云 Lite 愉快地玩转 TSW
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 织云 Lite & TSW 织云 Lite 是一款轻量型服务管理平台,提供标准化的应用打包操作,可连接持续集成系统,完成线上程序分发 ...
- mysql运维必会的一些知识点整理
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- timeCache.go
package blog4go import ( "sync" "time" ) const ( // PrefixTimeFormat 时间格式前缀 Pre ...
- bzoj5249 [2018多省省队联测]IIIDX
转化一下问题变成给定一棵树,一个序列,求父亲的权值小于子树的最大方案. 直接贪心会在有重复权值时出现错误,我们考虑用线段树优化贪心. 将序列从小到大排序,线段树上每个点记录他和他右边当前还可用的权值, ...
- JLOI2018 划水中...
day -3:月考成绩刚刚出炉,嗯,还看得过去,为此,我决定脱产3天...花了一天时间,学习splay day -2:在某人(汤)的刺激下,决定用半天时间A掉去年省选D2T1,事实证明,我还是图样图森 ...