xtraBackup备份原理剖析

xtrabackup做为innodb的hotbackup工具,由percona公司开发,因开源,热备份和物理备份而
在mysql中部署普遍,详情的说明可见以前的博客讨论.
mysql

  在物理级别热备份主要的一大挑战就是在文件级别数据块不一致.咱们知道innodb的单个page大小
由innodb_page_size 来决定,通常为16K.由4个文件系统4K的块组成.
sql

mysql> show global variables like 'innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| innodb_page_size | 16384 | 
+------------------+-------+
1 row in set (0.00 sec)
数据库

  
   因为是热备份,当备份工具在拷贝innodb page的时候,数据库自己的进程也有可能在写这个page
那么备份工具拷贝出来的page,就有多是坏的,也称为page 头尾不一致或是page断裂.这也就是为何
普通的os复制工具不能用来作为数据库物理热备份的工具缘由.
工具

    再看来看xtrbackup工具是怎么解决这一问题的.在备份开始的时候,xtrabackup会像普通的拷贝工具同样
去复制全部的innodb page,因此也会有page断裂的问题存在。xtrabackup在备份开始的时候,生成另
一个线程去拷贝当前的innodb的事务日志, 并同时监控innodb的事务日志文件,一旦有生成新的innodb的事务日志,
也会同时写到xtrabckup本身的日志中去.
spa

     在备份结束后,xtrabacup获得的结果是一份有page断裂的数据文件和备份期间全部的innodb的事务日志.这个
时候的状况和mysql实例崩溃的结果是同样的(实例崩溃后数据文件不完整,事务日志完整).xtrabackup还须要一
个过程,称为prepare,这个过程所作的事情和mysql实例崩溃后所作的操做基本一致。利用坏的数据文件和事务
日志进行rollback和forward操做。
线程

      xtrabckup自己连接了innodb相关的库,所在咱们在prepare阶段看到innodb的启动和关闭信息,很相似于标
准的mysql实例启动和关闭过程,实质是咱们在prepare的时候,xtrabackup在调用innodb相关的代码进行实例
恢复.prepare事后,xtrabackup备份文件就是一个一致性的数据拷贝,能够直接用来启动mysql。
日志

   能够看到xtrabackup经过innodb的事务日志来和数据page,进行实例恢复,而后获得一致性的备份.而对于那些
非innodb的表则无能为力了,由于没有事务日志.因此咱们能够看到在xtrackup备份Myisam的表,仍是须要只读表
锁来进行锁定,而后再备份数据文件,和普通的拷贝工具无异.
进程

相关文章
相关标签/搜索