一、基于日志点的复制
1、概述
基于日志点的复制是MySQL支持的第一种主从复制方式,也是最传统的复制方式。
这种复制方式在MySQL历史发行版、percona MySQL以及MariaDB中都是通用的。
在基于日志点的复制情况下,主可以是MySQL发行版,从可以是percona MySQL或MariaDB,这都是可行的。
2、基于日志点的复制的特点
slave请求master的增量日志依赖于日志偏移量,也就是二进制文件名和已经同步过的偏移量。
使用change master to
命令时,配置链路时,需要指定master_log_file和master_log_pos参数。
二、基于GTID的复制
1、概述
GTID(Global Transaction ID),全局事务ID。
从MySQL 5.6.5 版本开始新增了一种基于 GTID的复制方式。通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力。
GTID由两部分组成,source_id:transaction_id,其中source_id是执行事务的MySQL实例ID,而transaction_id是该集群中所执行过的每个事务所具有的的唯一标识,并且transaction_id是随着事务的不断执行递增的。
2、GTID的作用
(1)通过source_id来标识事务是在MySQL集群中哪台MySQL实例执行处理提交的。
(2)方便进行MySQL集群故障转移
当master挂掉后,我们只要从当前集群中选出哪个slave同步的事务最多(transaction_id最大),就将其选择为新的master,并使其他slave对新的master进行数据同步即可。
相比于基于日志点的复制,基于GTID的复制方式在进行故障转移上要方便很多。
(3)slave增量同步master的数据依赖于其已经同步的事务ID,master通过事务ID可以知道哪些事务还没有同步到slave上。
(4)相比于基于日志点复制,在基于GTID复制中,我们配置复制链路时,并不需要指定master_log_file和master_log_pos,只要指定master_auto_position参数即可
三、两种复制方式特点的比较
基于日志点的复制 | 基于GTID的复制 | |
---|---|---|
易兼容性 | MySQL新老版本、percona MySQL、MariaDB | MySQL新版本、percona MySQL |
支持的架构 | MMM架构、MHA架构 | MHA架构 |
故障转移的难易程度 | 主备切换后很难找到新的同步点 | 可以很方便的找到已完成同步的事务ID |
易维护性 | 可以方便的跳过复制错误 | 只能通过置入空事务的方式跳过错误 |
说明:
在支持的架构一点上,由于MMM架构已经缺乏必要的维护了,MMM架构并没有对最新的GTID复制进行支持。
在故障转移的难易程度一点上,基于日志点的复制方式,每一个实例的二进制文件名都不同,所以一旦master宕机,就很难找到新老master二进制文件及偏移量的对应关系,因此在基于日志点的复制方式中,主备切换后很难找到新的同步点。而与其对比,基于GTID复制的方式则很容易就找到新老master的同步点。
在易维护性一点上,基于日志点的复制只要设置 sql_slave_skip_counter 即可。
四、两种复制方式如何选择
根据使用场景:
需要兼容老版本MySQL及MariaDB,选择基于日志点的复制
需要MMM架构来做MySQL高可用架构管理,选择基于日志点的复制
其他各种情况,可以优先选择基于GTID的复制方式