xtrabackup<一、 原理>

本文深入探讨了xtrabackup在线备份工具如何在不锁表的情况下进行备份,以及其实现机制。包括log_copying线程的工作原理、数据文件复制过程、备份类型与操作流程。此外,还解释了xtrabackup如何解决普通os复制工具无法进行数据库物理热备份的问题,以及备份后的准备阶段和一致性备份的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   xtrabackup是percona在线备份的开源工具,其优点之一就是备份innodb表的时候不需要任何锁表,对于目前oltp系统来说,提高了系统的可用率。
   xtrabackup是如何来防止锁表,而又提供备份的功能呢?其实xtrabackup在备份的时候,做了以下两样事情: 
  [1]   It starts a log-copying thread in the background. This thread watches the InnoDB log files, and when they change, it copies the changed blocks
        
to a file calledxtrabackup_logfile in the backup target directory. This is necessary because the backup might take a long time,    and the recovery
        process needs all of the log file entries from the beginning to the end of the backup.
  [2]  It copies the InnoDB data files to the target directory. This is not a simple file copy; it opens and reads the files similarly to the  wayInnoDB does,
        by reading the data dictionary and copying them a page at a time
  
以上的解释如下:
  [1]  xtrabackup在后台启动了一个log_copying线程,负责监视innodb的logfile,一旦发现logfile有改动,就会将这些改动的blocks记录到一个xtrabackup_logfile 的文件中,后续的恢复会使用这个文件的日志(这个文件的目录由运行时指定的--target-dir参数指定.备份/恢复的时间开销与数据库数据的大小,和备份这段时 间内生成的日志文件的大小有关)
  [2]   xtrabackup会复制所有的数据文件到--target-dir所指定的目录中。xtrabackup并不是一个简单的文件copy,而是采用 innodb读取数据文件内容的方式,copy 相应的page到--target-dir指定的目录下的相关文件中。 当备份结束后,xtrabackup停止log-copying线程,并在目标目录中生成一个叫做xtrabackup_checkpoints的文件,文件中包含backup的类型(全备还是增量备份), 备份期间生成日志起止 LSN。
       一个简单的全量备份操作如下:
         xtrabackup --backup --datadir=/data/datacenter --target-dir=/data/xiaocai/。
        备份的数据文件的位置为datadir指定的位置,备份的目标目录为/data/xiaocai/。
        xtrabackup在线备份,搭建slave,对于一些24*7的oltp系统或许是一个好的解决方案。

  由于是热备份,当备份工具在拷贝innodb page的时候,数据库本身的进程也有可能在写这个page
那么备份工具拷贝出来的page,就有可能是坏的,也称为page 头尾不一致或是page断裂.这也就是为什么普通的os复制工具不能用来做为数据库物理热备份的工具原因.
  再看来看xtrbackup工具是怎么解决这一问题的.在备份开始的时候,xtrabackup会像普通的拷贝工具一样去复制所有的innodb page,所以也会有page断裂的问题存在。xtrabackup在备份开始的时候,生成另一个线程去拷贝当前的innodb的事务日志, 并同时监控innodb的事务日志文件,一旦有生成新的innodb的事务日志,也会同时写到xtrabckup自己的日志中去.
  在备份结束后,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的表,还是需要只读表锁来进行锁定,然后再备份数据文件,和普通的拷贝工具无异.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值