暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Xtrabackup工作原理

扫地僧的故事 2020-08-10
8273
Percona Xtrabackup是一款针对MySQL数据库的开源、免费的热备工具,支持增量备份,压缩备份和流备份等,功能十分强大。
有以下优点
1.备份速度快,且可靠
2.备份过程中不会打断正在执行的事务
3.能够基于压缩等功能节约磁盘空间和流量  
4.自动备份校验
5.备份还原的速度更快
6.可以使用流备,将备份传输到另一台机器 
旧版本的Xtrabackup包含两个主要的工具,xtrabackup和innobackupex。两者的区别是:xtrabackup只能备份innodb和xtradb两种引擎的表。innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和MyISAM。
但是,新版本的Xtrabackup就只包含了xtrabackup,innobackupex只是xtrabackup的一个软连接。(官网也补充了:Warning:The innobackupex program is deprecated。Please switch to xtrabackup。)
简单提一下,目前Xtrabackup2.4 支持MySQL 5.6和5.7。Xtrabackup 8.0 不支持MySQL 8.0之前的版本,并且Xtrabackup 8.0.X 也不支持MySQL 8.0.20及以上的版本。
在8.0.20上使用xtrabackup备份会报错:Unknown redo log format。。导致备份终止。
官方解释:

InnoDB: Redo log records for modifications to undo tablespaces increased in size in MySQL 8.0 due to a change in undo tablespace ID values, which required additional bytes. The change in redo log record size caused a performance regression in workloads with heavy write I/O. To address this issue, the redo log format was modified to reduce redo log record size for modifications to undo tablespaces. (Bug #29536710)

总之,选择适合自身环境的版本就ok啦。
懒得画图,直接从网上拷贝了一个。
🔗: https://www.cnblogs.com/linuxk/p/9372990.html

主要步骤分析:
1.innodbbackupex启动后,先fork一个进程,用来启动xtrabackup,然后等待xtrabackup备份ibd数据文件;
2.xtrabackup在备份innodb数据时,有2个线程:redo的监测拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,先启动一个redo 监测和拷贝线程,先记录一个latest LSN号(log sequence number,也就是最新的checkpoint点),再启动ibd数据拷贝线程,开始拷贝ibd数据。在此阶段,innobackupex进程处于等待状态(等待文件被创建)。

备份日志:

log copy 线程,每秒会去校验一次redo log,确认是否有新的记录被写入需要拷贝的

官方解释: 

如果备份的时候有大量的事务发生,日志复制线程可能无法跟上事务日志写入的速度,日志记录被覆盖,那么xtrabackup会报错,并退出。
4.xtrabackup 拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件的方式),同时xtrabackup进入等待状态(redo 拷贝线程依旧活跃中)
5.innodbbackup收到xtrabackup通知后,执行flush no_write_to_binlog tables 和flush tables with read lock,取得一致性位点,然后开始备份非innodb文件,在拷贝非innodb文件的过程中,数据库处于全局只读状态。 

6.当innodbbackup拷贝完所有的非innodb文件后,会通知xtrabackup,通知完成后,进入等待状态。
7.xtrabackup收到innodbbackupex备份完成的通知后。执行flush no_write_to_binlog binary logs,将binlog持久化,查询lsn,binlog pos等,拷贝binlog文件和binlog索引文件,并记录到xtrabackup_binlog_info文件中。接着执行flush no_write_binlog engine logs,将引擎层的重做日志持久化到磁盘。然后停止redo 拷贝线程。 

8.innodbbackupex收到redo备份完成后,开始进行解锁,unlock tables;
9.最后innobackupex和xtrabackup进程各自释放资源,写备份原数据信息。
10.备份完成 
整个Xtrabackup的流程就是这样的,至于基本用法和参数细节,需要的时候去官方查一查就可以啦。
https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
备份系列:
Mysql常用备份工具汇总
Mysqldump 工作原理
文章转载自扫地僧的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论