zoukankan      html  css  js  c++  java
  • XtraBackup的备份原理与应用示例

    一、XtraBackup简介与安装

      XtraBackup是一款免费的在线开源数据库备份解决方案,适用于所有版本的MySQL和MariaDB。XtraBackup支持对InnoDB热备,是一款物理备份工具。可对数据库做完全备份、部分备份、增量备份、差异备份。

    1.备份的实现原理

      InnoDB存储引擎是基于表空间(table space)进行存储的,表空间中被分成多个块(盘区),将数据分散存储至这些盘区中,每个盘区都有自己的编号,每当数据修改一次,日志序列号就增加1。在完全备份时,是将所有的盘区进行一次物理备份,而增量备份则是根据被修改的盘区号所导致的epoch变化选择性备份相对完全备份所被修改的盘区。例如下图中为某个数据库InnoDB引擎的盘区,完全备份是将1-5盘区全部备份,后来数据库被修改了,修改的数据是盘区1和3的数据,做增量备份时会将1和3号盘区进行备份。在做还原时会先还原完全备份中的1-5,再还原增量中的1和3。

      需要注意的是,在XtraBackup中,是将完全备份和所有的增量合并之后才进行对数据库还原操作的,不是在还原时合并的,是在还原之前就将所有数据合并好。

    2.XtraBackup的安装

      Percona官方站点安装:https://www.percona.com/downloads/XtraBackup/LATEST/

      下载完成后安装,用yum安装会自动安装依赖包:

    ~]# yum install percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm percona-xtrabackup-test-24-2.4.7-2.el7.x86_64.rpm
     1 ~]# rpm -ql percona-xtrabackup-24
     2 /usr/bin/innobackupex #主程序,核心组件,一般都是用这一工具进行备份
     3 /usr/bin/xbcloud
     4 /usr/bin/xbcloud_osenv
     5 /usr/bin/xbcrypt
     6 /usr/bin/xbstream #流式化工具,将数据流式化处理,便于传输保存
     7 /usr/bin/xtrabackup
     8 /usr/share/doc/percona-xtrabackup-24-2.4.7
     9 /usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING
    10 /usr/share/man/man1/innobackupex.1.gz
    11 /usr/share/man/man1/xbcrypt.1.gz
    12 /usr/share/man/man1/xbstream.1.gz
    13 /usr/share/man/man1/xtrabackup.1.gz

    二、XtraBackup功能演示

      上面已经介绍了XtraBackup支持增量备份的核心组件是LSN(日志序列号)。在恢复前需要先进行合并操作。

    1.全量的备份

      全量备份格式:

    innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

      选项:

     --no-timestamp :保存的备份目录不加时间戳

     --defaults-file=/tmp/other-my.cnf :配置文件路径

     /path/to/BACKUP-DIR/ :指明将备份存储在哪个目录

    2.全量的恢复

      全量恢复前需要先做Preparing,将备份本身的事务按实际情况做回滚或提交:

    innobackupex --apply-log /path/to/BACKUP-DIR

     --apply-log :根据事务日志判断哪些该提交哪些该回滚

      然后执行:

    innobackupex --copy-back BASE-DIR #BASE-DIR为备份的路径

    3.增量的备份

      增量备份需要基于全量备份来实现,在第一次做增量备份时指令中需要制定基于哪一个全量备份来做增量备份,之后的增量备份则都要基于上一次的增量备份来做,而差异备份则每一次都是基于全量备份,如图:

    innobackupex --incremental /data/backups --incremental-basedir=BASEDIR

     --incremental /data/backups :指明增量备份保存的路径

     --incremental-basedir=BASEDIR :指明增量备份基于哪一个全量备份

      每一次备份后XtraBackup会保存一个文件,在这个文件中记录了,备份的类型、LSN的起始点和结束点。例:

    1 backup_type = full-backuped
    2 from_lsn = 0
    3 to_lsn = 1291135

    4.增量的恢复

      在还原全量+增量时,全量有事务日志被备份,增量也有事务日志被备份,这时需要将全量中的已提交(COMMITED)的事务做还原,而未提交的部分不用做处理,待与增量中的事务合并后在进行回滚,因为全量中的事务可能在增量中有变化。

      先对全量操作,:

    innobackupex --apply-log --redo-only BASE-DIR

     --redo-only :只恢复事务中已提交的

      再对增量操作,将全量与增量合并:

    innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR2

      最后进行一次回滚:

    innobackupex --apply-log BASE-DIR

      还原:

    innobackupex --copy-back BASE-DIR

      查看innobackupex指令帮助:

    innobackupex --help
  • 相关阅读:
    基于git的源代码管理模型——git flow
    [Android]在Adapter的getView方法中绑定OnClickListener比较好的方法
    Java后台测试技巧
    JIRA python篇之展示多人未完成任务列表
    基于python3在nose测试框架的基础上添加测试数据驱动工具
    Java操作memcache
    对于软件测试行业的观察与反思
    通过Fiddler肆意修改接口返回数据进行测试
    Python操作MySQL数据库
    如何通过Fiddler模拟弱网进行测试
  • 原文地址:https://www.cnblogs.com/readygood/p/9865084.html
Copyright © 2011-2022 走看看