常用命令

innobackupex --defaults-file=/data/mysql_3306/my.cnf --no-timestamp --slave-info --compress --compress-threads=2 --parallel=4 --user automng --host=127.0.0.1 --port=3358 --password Automng_123 /export/bak/d01

O_DIRECT,绕过缓冲区高速缓存,直接IO,OS级命令

更多参考:UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解

涉及到的mysql理论绘制成一张图

 LSN

每个事务都会有一个LSN,系统文件上每个redo block 512bytes
log sequence number      每个事务生成一条日志记录时分配一个LSN
log flushed up to              innodb buffer pool日志刷新到redo log的LSN
pages flushed up to         redo log 向redo log文件中刷新的LSN,日志落盘
last checkpoint at             已经持久化到磁盘的脏块对应事务的LSN,数据落盘
 
 
LSN与事务xid
 
LSN是指的生成的字节数,是一个物理大小的概念,它的大小表示生成的事务占了多大物理空间;也可以通过LSN的大小去判断数据库内部操作的先后顺序,比如上面的四个步骤,先生成LSN,然后是将redo log写入文件,最后是脏块落盘;
这个顺序是绝对自增的,尽管事务之间有并发,但日志是顺序写的,换言之,数据库一次只写一个日志文件,这个日志的物理空间绝对是每写一次,占用空间就更大一些,这就是LSN
事务xid,是一个事务的编号,着重于代表事务发生的先后顺序

mysql内存与磁盘的数据一致性问题

写数据前,会先写redo,写完redo就可以返回客户端说写成功了

后台线程定期将内存中的脏块刷新到磁盘

如果此时,断电停机,则mysql崩溃,内存有脏块还未来得及落盘,磁盘文件不完整,文件有损;再启动时就需要崩溃恢复

mysql 崩溃恢复

last checlpoint位置以前的数据不需要恢复了

崩溃恢复,恢复的是last checkpoint到记录在redo log文件中的数据

恢复的起点

在redo log 写入文件以及脏块刷新时,LSN会写入文件

在数据库启动时,会先扫描数据文件最大的LSN与redo log文件中最大的LSN是否一致,如果不一致,就需要对数据文件进行恢复

最大的LSN更专业的叫法就是,last checkpoint,扫描数据文件中的last checkpoint与redo 中的最大LSN是否一致

利用redo log文件恢复时,只需要扫描LSN > last checpoint位置的数据

恢复过程中的前滚与回滚

在redo中,一个完整的记录有三个标识,xid(事务结束后写入的事务标识), filename(binlog的文件名)、pos(binlog中的位点)

当然也是LSN,对应物理page的num等,但主要通过以上三个标识去确定是一个事务是该前滚,还是回滚

如果xid,filename,pos都在,就前滚

如果xid在,filename在,pos不在,就去binlogs确认事务是否已经在binlog中commit的,如果commit就前滚,没有commit就回滚。

如果xid在,filename也不在了,就去最后一个binlog中看看对应的xid是否已经提交,如果是则前滚,反之回滚。

恢复的过程

redo log文件记录并不是全部的数据,还需要数据文件、undo、binlog进行配合

找到redo log last checkpoint的位置

将相应的块从数据文件读到内存,先前滚,后回滚

备份命令

rm -rf /export/bak/d01

innobackupex --defaults-file=/data/mysql_3306/my.cnf --no-timestamp --slave-info --user automng --host=127.0.0.1 --port=3358 --password Automng_123 /export/bak/d01

d01这个目录不必提交创建好,会自动创建

xtrabackup原理概述

如果数据库中的所有文件,数据文件,Undo文件,redo log文件等,在备份完成后,进行一次崩溃恢复;

在备份一个数据文件时,会判断所备份的数据文件的LSN是否已经包含在redo中了,

比如redo的LSN写到了500,但数据文件的LSN才到480,则会等待log scan直接数据文件中的LSN大于等于500才会开始备份这个数据文件,

一定会等到现有的 物理数据文件 + 现有redo log文件 可以不丢数据地进行“前滚”的时候,才会开始备份这个数据文件(redo log文件一直在备份)

xtrabackup备份步骤

1. 持续备份redo log文件

2. 备份数据文件, ibd文件

3. flush tables with read lock

4. 备份表结构等除数据文件的其他文件

5. 获取binlog log position(由于已经加锁,期间整个数据库不会有事务变化,也是后续恢复的起点)

6. unlock tables

7. 停止备份redo log文件

xtrabackup原理的更多相关文章

  1. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

  2. xtrabackup原理1

    http://www.cnblogs.com/Amaranthus/archive/2014/08/19/3922570.html Percona XtraBackup User Manual 阅读笔 ...

  3. XtraBackup 原理与安装

    简介 XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...

  4. xtrabackup原理,整库,单表,部分备份恢复

    物理备份xtrabackup原理 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Pe ...

  5. XtraBackup原理解读

    XtraBackup是现今为止唯一一款为InnoDB 和XtraDB提供热备的开源工具,这个工具有以下的有点: (1)备份快速高效而且可靠 (2)备份过程可以做到事物处理不间断 (3)节省磁盘空间和网 ...

  6. XtraBackup原理3

    http://mysql.taobao.org/monthly/2016/03/07/ MySQL · 物理备份 · Percona XtraBackup 备份原理 前言 Percona XtraBa ...

  7. xtrabackup原理2

    XTRABACKUP备份原理实现细节——对淘宝数据库内核月报补充 前言 淘宝3月的数据库内核月报对xtrabackup的备份原理做了深入的分析,写的还是很不错.不过Inside君在看完之后,感觉没有对 ...

  8. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  9. xtrabackup原理、备份日志分析、备份信息获取

    一. xtrabackup备份恢复工作原理: extrabackup备份简要步骤 InnoDB引擎很大程度上与Oracle类似,使用redo,undo机制,XtraBackup在备份的时候,以read ...

随机推荐

  1. Awesome metaverse projects (元宇宙精选资源汇总)

    Awesome Metaverse 关于 Metaverse 的精彩项目和信息资源列表. 由于关于 Metaverse 是什么存在许多相互竞争的想法,请随时以拉取请求.问题和评论的形式留下反馈. We ...

  2. 浅谈springboot自动配置原理

    前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...

  3. js 实现匀速移动

    js 实现匀速移动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  4. shiro550反序列化分析

    拖了很久的shiro分析 漏洞概述 Apache Shiro <= 1.2.4 版本中,加密的用户信息序列化后存储在Cookie的rememberMe字段中,攻击者可以使用Shiro的AES加密 ...

  5. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」帮你梳理RocketMQ或Kafka的选择理由以及二者PK

    前提背景 大家都知道,市面上有许多开源的MQ,例如,RocketMQ.Kafka.RabbitMQ等等,现在Pulsar也开始发光,今天我们谈谈笔者最常用的RocketMQ和Kafka,想必大家早就知 ...

  6. 为什么不直接去Arraylist list = new Arraylist();而是直接通过List list = new ArrayList();使用接口的好处

    ArrayList不是继承List接口,是实现了List接口. 你写成ArrayList arrayList = new ArrayList();这样不会有任何问题.和List list = new ...

  7. 设计模式学习-使用go实现适配器模式

    适配器模式 定义 代码实现 优点 缺点 适用范围 代理.桥接.装饰器.适配器4种设计模式的区别 参考 适配器模式 定义 适配器模式的英文翻译是Adapter Design Pattern.顾名思义,这 ...

  8. Effective C++ 总结笔记(六)

    七.模板与泛型编程 41.了解隐式接口和编译器多态 1.类和模板都支持接口和多态. 2.类的接口是显式定义的--函数签名.多态是通过虚函数在运行期体现的. 3.模板的接口是隐式的(由模板函数的实现代码 ...

  9. vue如何写组件(script标签引入的方式)

    很多人知道.vue结构的单文件组件形式,不过这种单文件组件的结构如果要加入到现有的jquery项目中就比较麻烦了,那如果我们又想用vue来写模板,又不想引入vue-cli管理,那该怎么来写组件呢?别着 ...

  10. 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室(升级版)

    很长一段时间没有写3D库房,3D密集架相关的效果文章了,刚好最近有相关项目落地,索性总结一下 与之前我写的3D库房密集架文章<如何用webgl(three.js)搭建一个3D库房,3D密集架,3 ...