MySQL有四种同步方式:
- 异步复制(asynchronous)
搭建简单,使用非常广泛,从mysql诞生之初,就产生了这种架构,性能非常好,可为非常成熟。但是这种架构数据是异步的,所以有丢书数据库的风险。 - 全数据复制(fully synchronous)
保证数据安全,不丢数据,损失性能 - 传统半同步复制(Semi synchronous)
性能、功能都介于异步和全同步之间。从mysql5.5开始诞生,目的是为了折中上述两种架构性能已优缺点。 - 无损复制,增强版的半同步复制(lossless replication)
数据零丢失,性能好,mysql5.7诞生
MySQL主从复制技术值GTID特性:
什么是GTID?
GTID(Global Transaction dentifiers):对于一个已提交事务的编号,事务的唯一编号,并且是一个全局唯一的编号。GTID和事务会记录到binlog中,用来标识事务。
GTID 是用来替代以前传统复制方法(binlog+position),从MySQL5.6.2开始支持GTID。
MySQL支持GTID后,一个事务在急群众就不再孤单,在每一个节点中,如果存在具相同标识符的情况,可以避免同一个事务,在同一个节点中出现多次的情况。
GTID的出现,最直接的效果就是,每一个事务在集群中具有了唯一性的意义,相对于行复制来讲数据安全性更高,故障切换更简单
GTID是由server_uuid : Sequence_Number。
Server_Uuid:是一个MySQL 实例的全局唯一标识;存放在$datadir/auto.cnf
Sequence_Number:是M有SQL内部的一个事务的编号,一个MySQL实例不会重复的序列号(保证服务器内唯一),也表示在该实例上已经提交事务的数量,并且随着事务提交而递增。
根据GTID可以知道事务最终是在哪个实例上提交的,方便故障排查和切换