MySQL运维实战之Clone插件(10.2)Clone插件原理

俊达2年前技术文章1539

clone插件实现

clone_plugin.png


clone操作主要分为几个阶段:

1、初始阶段。

初始阶段,会开启页面跟踪(Page Tracking)。开启页面跟踪后,修改过的页面的编号会被记录下来。页面的修改可分为两个阶段:首先在内存中修改(也就是在InnoDB buffer pool中修改缓存的页面数据),然后被修改的页面会在一定的时机持久化到数据文件。页面跟踪机制大概是在页面持久化的时候记录页面的编号(页面的表空间ID和Page ID)。

2、文件复制阶段。

在这一阶段,clone插件会复制所有InnoDB文件。文件复制结束后,开启InnoDB Redo归档,关闭页面跟踪。

3、页面复制阶段

这一阶段,会将文件复制阶段内跟踪到的页面复制出来。

页面复制完成后,停止Redo归档。

页面复制阶段完成后,当时的lsn记录为CLONE Lsn,这也是clone出来的数据库的lsn。

这里还会记录实例当前的复制位点,如binlog位点和gitd信息。

4、Redo复制阶段

这一阶段,处理归档出来的redo日志。应用完归档日志后,clone的数据库就是一个可以直接启动的数据库。


clone如何保证数据一致性

clone插件如何保证最终得到的数据的一致性呢?

假设clone开始时的checkpoint为ckpt 0,clone文件复制结束时的checkpoint为ckpt 1。


1、首先在clone开始时(clone start lsn),先开启了页面跟踪。开启页面跟踪后,在此之后写入文件的页面都会被记录。

2、文件复制阶段会将所有已经完成持久化的数据复制出来。这一步保证ckpt 0之前修改的数据都被复制出来。

3、文件复制过程中,数据库文件会持续更新。由于开启了页面跟踪,数据文件中更新过的页面ID都会被记录下来。关闭页面跟踪时数据库checkpoint为ckpt 1,则ckpt 0和ckpt 1之间修改的页面,都会被记录下来,这些页面在页面复制阶段处理。



4、文件复制完成后、关闭页面跟踪前,会先开启redo归档。redo归档会将日志序列号(lsn)在当前checkpoint之后的redo日志都复制到归档REDO文件中。由于redo归档是在关闭页面跟踪前开启的,所以能保证ckpt 1之后的redo日志都会被复制到归档REDO文件中。

5、页面复制结束时,可能会有部分页面的数据修改还没有刷新到磁盘。这些页面修改的序列号都在ckpt 1之后。而ckpt 1之后的redo日志都在归档redo文件中,通过重用归档redo日志,就可以将数据库恢复到一个一致的时间点(clone lsn),也就是停止redo归档时的那一刻。

参考文档:

https://dev.mysql.com/worklog/task/?id=9209


相关文章

MySQL运维实战(2.3)MySQL的权限体系和一个例子

mysql权限按授权范围分为3大类全局权限。全局权限是用于管理系统模块的权限。跟具体的数据库或对象无关。授权时需要指定为*.*数据库权限对象权限对于具体的数据库对象的权限,如表、字段级别的权限。MyS...

MySQL运维实战(5.1) 字符和编码的基本概念

MySQL运维实战(5.1) 字符和编码的基本概念

字符和编码字符字符是符号,是人们用于交流的各类符号,如26个英文字母、汉字、标点符号、数学运算符、其他语言的字母和符号。编码编码是计算机中以二进制方式存储字符的方式。字符集字符集是字符和编码的映射表。...

MySQL运维实战之备份和恢复(8.3)xtrabackup增量备份

xtrabackup支持增量备份。在做增量备份之前,需要先做一个全量备份。xtrabackup会基于innodb page的lsn号来判断是否需要备份一个page。如果page lsn大于上次备份的l...

MySQL运维实战(4.3) SQL_MODE之ONLY_FULL_GROUP_BY

设置ONLY_FULL_GROUP_BY后,对有group by子句SQL,select的字段要么是group by中的字段,要么对字段进行聚合运算,否则sql执行报错。不设置ONLY_FULL_GR...

MySQL运维实战之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

如果后端MySQL使用了Group Replication,可通过配置mysql_group_replication_hostgroups表来实现高可用mysql_group_replication_...

MySQL运维实战之ProxySQL(9.2)ProxySQL安装和配置

proxysql安装proxysql提供了各个linux发行版的安装包,我们可以使用操作系统的包管理系统来安装proxysql。这里我们以CentOS 7为例:1、从github下载安装包根据OS版本...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。