XtraBackup是现今为止唯一一款为InnoDB 和XtraDB提供热备的开源工具,这个工具有以下的有点:
(1)备份快速高效而且可靠
(2)备份过程可以做到事物处理不间断
(3)节省磁盘空间和网络带宽
(4)自动备份验证
(5)恢复速度快而高效
XtraBackup适用于所有版本的Percona Server, MySQL, 和MariaDB.而且提供了流式备份,增量备份,全备份,压缩备份的功能。对于InnoDB, XtraDB, 和HailDB,XtraBackup可以实现完全无阻塞的备份。而且它对MyISAM, Merge, 和Archive等存储引擎也有很好的支持,但是在备份的末尾部分要短暂的写入时间造成不可用状态。当然官方也有一个要掏钱的工具MySQL Enterprise backup,不过大家都很少用的,功能相比XtraBackup不多,但是还是收费的,我们不排斥收费,我们只是力挺开源。
我们可以简单先看一下XtraBackup能做到那些:
(1)InnoDB 无阻塞备份,如果不是INNODB的数据表的话还是回lock table。
(2)可以为mysql提供增量备份
(3)使用流式备份将mysql备份传送到另外一台server
(4)在线在mysql数据库之间移动数据表
(6)对数据库服务器没有太大负载
(7)XtraBackup 提供多种加密备份。
percona的XtraBackup 在备份的过程中是回跳过二级索引的备份,直到备份一个完整的数据库备份以后,再去重新创建二级索引,而且XtraBackup在备份中是可以导出单个表的,而且导出的表还可以在导入到percona库里(版本号大于5.1或者mysql官方大于5.6),而且在备份的时候会产生一个备份锁,是个轻量级的替代锁(替代FLUSH TABLES WITH READ LOCK)。
我们上面已经看到了XtraBackup功能的强大之处,下面看一下XtraBackup到底是怎么运行的:
其实XtraBackup也是基于INNODB的 crash-recovery功能来实现的,他是对于数据文件的直接拷贝,为了保证数据内部的一致性,就需要使用到了crash-recovery来确保恢复的数据库是一致性的,而且是可用的。mysql本身是有一个自己自身的事务日志文件,也就是redo log,也就是说当INNODB启动的时候会做两步操作,事务日志中已经提交的事物会重做,之前没有提交的事物但是已经对数据文件做了修改的就会回滚,借此来保证数据的一致性。大部分关系型数据库都是这个原理。XtraBackup 也是基于LSN( log sequence number)来工作的,每次启动备份,都会记录LSN,然后开始拷贝文件,拷贝文件是要花费一部分时间的,所以说这期间一般情况都会有数据交互,所以说所有文件也可能记录的并不是一个时间点的数据,这个时候XtraBackup 就会启动一个后台进程来观测mysql的事务日志,而且把事务日志中的改变记录下来。我们知道事物日志是回重用的(redo log),所以说这个监控事务日志的后台进程从启动那一刻起就会不停的运作,直到备份结束。这个后台监控进程会记录所有的事务日志的改变,这些是保证数据一致性所必须的。
前面有提到,XtraBackup 在备份的时候会用一个备份锁( Backup locks )来取代FLUSH TABLES WITH READ LOCK,这是一个轻量级的替代锁(percona server 5.6+),XtraBackup 也会利用这个特性自动备份非INNODB表数据,可以防止阻塞DML语句的操作,当 backup locks 被支持的时候,xtrabackup 就会先拷贝INNODB的数据表,运行LOCK TABLES FOR BACKUP来拷贝MYASIM表和 .frm 文件,当拷贝结束后,在开始拷贝 .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, .par, 和.opt等文件。当然需要注意的是,备份的第一步是先完成INNODB的备份(文件和日志),LOCK TABLES FOR BACKUP只是针对非INNODB表来说的。
以上执行完毕以后,XtraBackup 会执行LOCK BINLOG FOR BACKUP来锁定日志文件用以记录在日志中的位置,或者是Exec_Master_Log_Pos 或者Exec_Gtid_Set的值,这些记录值是和SHOW MASTER/SLAVE STATUS中report的是一致的。然后停止拷贝事务日志,记录位置信息,结束以后unlock日志和表。
在恢复的准备阶段,XtraBackup 会执行crash-recovery执行备份的日志,然后将数据库启动到可用的状态。最终备份的INNODB和MYASIM表都会数据一致,INNODB表数据一致是到备份结束的时间点,而不是备份开始的时间点,因为日志是要应用到这个时间点的。这个时间点是和FLUSH TABLES WITH READ LOCK是一致的。
下面看一下怎么去Restoring 一个 backup:
我们可以使用--copy-back 或者 --move-backup参数来还原一个数据库。在还原的时候,xtrabackup 会首先去读取配置文件里面的一些参数( datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir)已确定这些目录是否存在。
如果存在的话就回去执行拷贝,首先被拷贝的是MYASIM表,索引还有一些其他存储引擎的文件,接下来才会拷贝INNODB表和索引,然后是事务日志文件,在复制的时候是要保留源文件的所有属性,所以说这些目录的所有者最好是给mysql用户。但是我们要特别注意--move-back这个参数,它是会移动备份文件,而不仅仅是恢复那么简单。这样的话原来的备份就没有了,是一个很危险的操作,唯一的适用场景就是磁盘空间不足了,只能通过移动的方式来恢复,SO这个参数还是少用为妙。
- Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...
- xtrabackup原理1
http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html Percona XtraBackup User Manual 阅读笔 ...
- XtraBackup 原理与安装
简介 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...
- NRF24L01——工作原理解读
源: NRF24L01——工作原理解读
- xtrabackup原理,整库,单表,部分备份恢复
物理备份xtrabackup原理 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Pe ...
- Java并发之AQS原理解读(三)
上一篇:Java并发之AQS原理解读(二) 前言 本文从源码角度分析AQS共享锁工作原理,并介绍下使用共享锁的子类如何工作的. 共享锁工作原理 共享锁与独占锁的不同之处在于,获取锁和释放锁成功后,都会 ...
- Java并发之AQS原理解读(二)
上一篇: Java并发之AQS原理解读(一) 前言 本文从源码角度分析AQS独占锁工作原理,并介绍ReentranLock如何应用. 独占锁工作原理 独占锁即每次只有一个线程可以获得同一个锁资源. 获 ...
- Java并发之AQS原理解读(一)
前言 本文简要介绍AQS以及其中两个重要概念:state和Node. AQS 抽象队列同步器AQS是java.util.concurrent.locks包下比较核心的类之一,包括AbstractQue ...
- xtrabackup原理
常用命令 innobackupex --defaults-file=/data/mysql_3306/my.cnf --no-timestamp --slave-info --compress --c ...
随机推荐
- Spark代码调优(一)
环境极其恶劣情况下: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.sp ...
- CentOS7 修改主机名(转)
转载出处:http://www.centoscn.com/CentOS/config/2014/1031/4039.html CentOS7 时间同步:http://www.cnblogs.com/r ...
- Redis数据库入门教程
[使用redis客户端] 我们直接看一个例子: 复制代码 代码如下: //这样来启动redis客户端了 $ ./redis-cli //用set指令来设置key.value 127.0.0.1:637 ...
- 在shiro-cas中实现 Jasig-cas的Single Sign Out 功能
1 Single Sign Out 功能 即单点登出功能.也就是在任意子系统进行登出操作后,其他子系统会自动登出. 实际CAS登出的步骤为 所以每个子系统都需要实现一个sso登出响应. cas-cli ...
- linux 安装beyond compare
安装好后,在终端运行bcompare 就ok
- Retina Display and Eclipse Mac视网膜屏和Eclipse
I have a Retina Display and Eclipse looks blurry. How can I fix it? You need to tell Mac OS that Ecl ...
- 仿造w3school的试一试功能,实现左侧编辑框,右侧效果页面
转自http://fhqllt.iteye.com/blog/836186 每次想快速测试页面效果的时候,特别是在学习前端代码的时候,就想到W3school的那个试一试功能,一直都是用他们那个在线的版 ...
- 在Linux上编写C#程序
自从C#开源之后,在Linux编写C#程序就成了可能.Mono-project就是开源版本的C#维护项目.在Linux平台上使用的C#开发工具为monodevelop.安装方式如下: 首先需要安装一些 ...
- 编译器zynq设置环境变量
设置临时环境变量export CROSS_COMPILE=arm-xilinx-linux-gnueabi- export PATH=/work/tool/cross_compiler/bin:$PA ...
- insertAdjacentHTML方法示例
添加HTML内容与文本内容以前用的是innerHTML与innerText方法,最近发现还有insertAdjacentHTML和insertAdjacentText方法,这两个方法更灵活,可以在指定 ...