在上一篇文章中:MySQL-基于docker实现Replication集群主从复制及读写分离介绍了基于Docker实现的MySQL主从,利用的是普通的日志方式实现的。文章末尾,提了一下基于GTID实现主从,以及它的优点。不过没有写完,这一篇就利用中午休息的时间介绍下基于GTID的主从实现。
GTID
GTID,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找点儿,而无需像之前那样通过File_name和File_position找点儿了。
所以,这种方式能够保证主库的写入以及从库的复制在一个事务内,避免出现主库写入成功,从库复制失败而导致的从库读取数据失败。
直接开始正文吧。
实现
如果你是第一次基于Docker搭建,并且也是第一次搭建这个主从,请保证阅读过上一篇文章,关于前几个步骤,就不在这里再次重复操作一遍了。请参照上一篇文章启动运行几个MySQL容器。
假设你已经完成了第一篇,1.1-1.4
之前的操作。
注意:1.1-1.4请参照上一篇实现