zoukankan      html  css  js  c++  java
  • Xtrabackup工作原理

    1.Xtrabackup介绍

    Xtrabackup是Percona公司专门针对MySQL数据库开发的一款开源免费的物理备份(热备)工具,可以对InnoDB和XtraDB等事务引擎的数据库实现非阻塞(即不锁表)方式的备份,也可以针对MyISAM等非事务引擎实现锁表方式备份。

    Xtrabackup的主要特点:

    1、直接复制物理文件,备份和恢复数据的速度非常快,安全可靠。
    2、在备份期间执行的事务不会间断,备份InnoDB数据不会影响业务。
    3、备份期间不会增加太多数据库的性能压力。
    4、支持对备份的数据进行自动校验。
    5、支持全量、增量、压缩备份及流备份。
    6、支持在线迁移表以及快速创建新的从库。
    7、支持几乎所有版本的MySQL和MariaDB。
    

    2.Xtrabackup备份涉及的数据库名词

    2.1.MySQL数据文件扩展名知识说明

    Xtrabackup备份中涉及的一些数据库专业信息知识:

    文件扩展名 文件作用说明
    .idb文件 以独立表空间存储的InnoDB引擎类型的数据文件扩展名
    .ibdata文件 以共享表空间存储的InnoDB引擎类型的数据文件扩展名
    .frm文件 存放与表相关的元数据(meta)信息以及表结构的定义信息
    .MYD文件 存放MyISAM引擎表的数据文件扩展名
    .MYI文件 存放MyISAM引擎表的索引信息文件扩展名

    2.2.事务型引擎的ACID特性

    在MySQL中,InnoDB和MariaDB中的XtraDB都是事务型引擎,事务型引擎的共同特征是具备事务的4个特性,这4个特性分别是:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),又称为ACID特性。

    ACID特性说明:

    ACID特性 说明
    原子性 事务的所有SQL语句操作,要么全部成功,要么全部失败
    一致性 事务开始之前和结束之后,数据库应保证数据的完整性不被破坏
    隔离性 当多个事务并发访问同一个数据源时,数据库能够保持每个访问的事务之间是隔离的,互不影响的
    持久性 事务处理完成之后,事务所做的更改都会是持久化存储,不会丢失数据

    2.3.InnoDB引擎内部知识概念

    InnoDB基础概念知识:

    概念名称 说明
    表空间(tablespaces) 表空间是一个逻辑的概念,表空间里存放的是表的数据和索引,这些表的数据和索引又有不同的存储方式,表空间最终体现的是磁盘上数据库的各种物理数据文件
    独立表空间(independent tablespaces) 在开启InnoDB的innodb_file_per_table=On这个参数之后,对于每一个新建的InnoDB表,数据库目录下都会多出来一个对应的存放该表数据的.ibd文件
    共享表空间(shared tablespaces) 5.6版本以前,MySQL的默认配置就是共享表空间模式,即所有表的数据都会在一个或几个大数据文件中存放
    页(page) MySQL的每个表空间都是由若干个页组成的,且每个实例里的每个表空间内都有相同的页大小,默认值是16KB,可以通过innodb_page_size调整页大小,每个页中都包含了表的数据。组成表空间数据的最小单位是页
    区段(extent) 在表空间中,系统会把每若干个页进行分组管理,这个组就叫作区段,默认一个区段的大小是64页
    段(segments) 段是由多个不同的区段组成的更大的分组。当一个段增加的时候,InnoDB第一次分配32个页给这个段,此后,InnoDB开始分配整个区段给这个段,InnoDB可以一次性添加4个区段给一个大的段,从而确保数据存储时能有一个良好的顺序性

    2.4.InnoDB引擎内部知识及说明

    InnoDB的表空间分为共享表空间和独立表空间(推荐)两种,表空间里存放数据的最小单位是页,每个页的默认值为16KB;多个连续的页(默认是64个)组成一个区段;而多个区段和页构成一个段。初始时,InnoDB首先会为每个段分配32个页,之后根据实际需要再将区段分配给段,InnoDB可以一次性添加4个区给一个大的段,从而确保数据存储时能有一个良好的顺序性。

    2.5.InnoDB备份相关名词

    InnoDB日志及Xtrabackup备份原理所涉及的词汇知识:

    相关名词 说明
    redo日志 redo日志,也称为事务日志,是InnoDB引擎的重要组成部分,作用是记录InnoDB引擎中每一个数据发生的变化信息。主要用于保证InnoDB数据的完整性,以及丢失数据后的恢复,同时还可以有效提升数据库的IO等性能。redo日志对应的配置参数为innodb_log_file_size和innodb_log_files_in_group
    undo日志 undo日志是记录事务的逆向逻辑操作或者逆向物理操作对应的数据变化的内容,undo日志默认存放在共享表空间中(ibdata*文件),与redo日志功能不同的是undo日志主要用于回滚数据库崩溃前未完整提交的事务数据,确保数据恢复前后是一致的
    LSN LSN(log sequence number)是指日志序列号,是一个64位的整型数字。LSN的作用是记录redo日志时,使用LSN唯一标识一条变化的数据
    checkpoint 用来标识数据库崩溃后,应恢复的redo日志的起始点

    3.Xtrabackup备份的工作原理

    3.1.Xtrabackup恢复的工作原理

    Percona Xtrabackup软件是基于InnoDB等事务引擎自带的redo日志和undo日志功能来保持备份和恢复前后数据一致性的,从而确保数据库的数据安全可靠。在InnoDB引擎中存在一个redo日志(事务日志)功能。redo日志文件会存储每一个InnoDB表中的数据修改记录。当InnoDB数据库启动时,会检查数据文件和redo日志文件,将已经提交到事务日志(redo日志文件)中的信息应用(提交)到数据文件并保存,然后根据undo日志信息将修改过但没有提交的数据记录进行回滚(不提交到数据文件)。

    3.2.Xtrabackup执行全备份的原理

    当执行Xtrabackup程序开始备份时,Xtrabackup首先会记录当前redo日志的位置(即对应的LSN号),同时还会在后台启动一个进程持续监视redo日志文件的变化,并将变化的信息都记录到Xtrabackup_logfile中,之后就会针对所有的InnoDB数据文件进行备份(复制),待InnoDB数据文件备份完成之后,再执行“flush tables with read lock”命令对整个数据库锁表,然后备份(复制)MyISAM等非事务引擎的数据文件。待数据文件全部(包括InnoDB、MyISAM数据文件和redo日志数据记录)都备份完毕之后,获取binlog二进制日志位置点信息,最后执行unlock tables解锁命令,恢复整个数据库的可读写状态。

    3.3.Xtrabackup执行全备份恢复的过程

    当执行Xtrabackup工具恢复数据时,要经过准备恢复(prepare)和实际恢复(restore)两个步骤。在准备恢复过程结束后,InnoDB表的数据(即备份的物理文件)就恢复到了复制InnoDB文件结束时的时间点,这个时间点也是全库锁表复制MyISAM引擎数据时的起点,所以最终恢复的数据和数据库的数据是一致的。全备的数据有两部分,一部分是全备的物理文件,一部分是Xtrabackup log日志文件。

    3.4.Xtrabackup执行增量备份的过程

    Innobackupex增量备份的(仅对InnoDB引擎有效)核心就是复制全备之后的InnoDB中变更的“页”数据,复制时会以全备中xtrabackup_checkpoints文件对应的LSN号为依据,将大于给定的LSN号的页数据(就是增量数据)进行备份,因为要比对全备的LSN号,所以第一次增量备份是基于全备的,以后实施的每一次增量备份都要基于上一次的增量备份,最终实现备份的数据是连续的、无缺失的,针对MyISAM引擎的备份依然是锁表备份。

    增量备份的过程:

    首先在全备的xtrabackup_checkpoints logfile中找到并记录最后一个checkpoint(last checkpoint LSN),然后从该LSN的位置开始复制InnoDB的redo日志到Xtrabackup_logfile,然后开始复制全部的数据文件.ibd,待全部数据复制结束后,就停止复制logfile,增量备份的过程与全备基本类似,区别就是第二步,仅复制InnoDB中变化的页数据,而非所有物理文件。

    3.5.Xtrabackup执行增量恢复的过程

    增量数据的恢复过程与全量备份的恢复过程类似,所不同的是增量恢复是以全备份数据为基础的,增量恢复的数据主要涉及全备的数据、增量的数据、Xtrabackup_log日志文件。恢复过程是先将增量备份中变化的页数据应用到全备数据中,然后,读取Xtrabackup_log应用redo数据到全备数据中,同时回滚未提交的事务。

  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/yanyanqaq/p/12922515.html
Copyright © 2011-2022 走看看