mysql中基于filename pos复制和GTID复制模式的区别

一.简单介绍一下主从复制模式

1.同步怎样进行的?

master用户写入数据,生成event记到binary log中.

slave接收master上传来的binlog,然后按顺序应用,重现master上的用户操作。

2.靠什么同步的?

主从复制,默认是通过pos复制(postion),就是说在日志文档里,将用户进行的每一项操作都进行编号(pos),每一个event都有一个起始编号,一个终止编号,我们在配置主从复制时从节点时,要输入master的log_pos值就是这个原因,要求它从哪个pos开始同步数据库里的数据,这也是传统复制技术,

MySQL5.6增加了GTID复制,GTID就是类似于pos的一个作用,不过它是整个mysql复制架构全局通用的,就是说在这整个mysql冗余架构中,它们的日志文件里事件的GTID值是一致的.

3.从节点怎么知道要从哪块进行同步?

上面也说了,一开始是自己设置的从主节点的日志文件里的pos开始复制,以后就自己去读取上一次同步到哪一块,接着同步.

二.传统复制和DTID模式复制区别

在mysql的复制架构中(一主多从的架构中),如果master crash,如何让某一个salve竞选为new master?下面分别对基于filename pos和GTID两种复制模式下进行分析对比

对比图

分析如下:

使用filename+pos位置点

        当 Master宕机 后,一个 Slave 被 提升为New Master ,如果需要继续维持复制关系,就需要把另外两个Slave的 CHANGE MASTER 指向 New Master ;那问题来了,原来Slave是指向 Master 的 Filename_M + Position_M 的位置,现在要指向 New Master 上新的 Filename_N + Position_N 的位置,这两个位置是比较难对应起来的 ; 此时两个Slave要继续复制(CHANGE MASTER)会比较麻烦。

• 使用GTID

         和上面一样的场景,两个Slave需要重新指向 New Master ,由于 使用了GTID ,目前 Slave-2获取到的日志对应的 GTID=G_2 ,Slave-3 获取到的日志对应的 GTID=G_3 ;此时 New Master 上是存在 G_2 和 G_3 ( 通过选举出来的,获取的日志应该是最多的 ),那两个Slave就可以直接使用 G_2和G_3 这两个GTID,通过指向 New Master 接着继续复制;

推荐阅读更多精彩内容