简介
Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎数据库进行非阻塞的备份,其具备以下一些优点:
1)备份速度快,物理备份可靠
2)备份过程不会打断正在执行的事务
3)能够基于压缩等功能节约磁盘空间和流量
4)自动备份校验
5)还原速度快
6)可以流传将备份传输到另外一台机器上
7)在不增加服务器负载的情况备份数据
Xtrabackup热备和恢复原理如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/36ddfc66d96b53e0c0147ca6fd7549de.jpeg)
恢复阶段则启动xtrabackup内嵌的innodb实例,回放xtrabackup日志xtrabackup_log,将提交的事务信息变更应用到innodb数据/表空间,同时回滚未提交的事务(这一过程类似innodb的实例恢复)。如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/a728daebe0576dba0a11795ec3d1f6d1.png)
从备份恢复的流程上看,备份过程主要受拷贝文件和日志生成速度影响,即和磁盘IO、网络以及系统压力有关;恢复过程则主要和IO、并发控制相关,本文下面将主要讨论Xtrabackup恢复阶段的优化。
现状
Xtrabackup的恢复过程实则是调用内嵌innodb的恢复逻辑来实现的(修改了一些参数的默认值,如恢复时buffer pool缓存页面数目),而innodb的恢复一直以来都不是那么的高效,社区也有很多innodb崩溃恢复流程的优化方案。
在实际生产环境中,动辄上T的数据在使用Xtrabackup进行热备时通常要产生几十G甚至更大的日志文件,受限于备份恢复虚拟机的配置,这样的备份在恢复时往往需要数个小时,平均恢复速度仅为1-4M/s(热数据分布相关),这样的速度给现网实例的运维造成了很大的麻烦。
问题
通常情况下,InnoDB的恢复过程中的内存分配类型为MEM_HEAP_BUFFER,即在buffer pool中开辟一段内存用于存放日志记录,当需要恢复的日志文件很大时,可能存在内存不足的情况,根据内存是否充足把日志的处理分为两种方式:
1、开辟的内存足够所有保存日志记录
![](https://i-blog.csdnimg.cn/blog_migrate/99318e64b06ce9968b5d7f606017b49f.png)