今天突然想了一下,一个master ,一个slave。
master的uuid为 f50c4171-f1c4-11e9-8de8-0050563a3356
slave2的uuid为 6bf23ca7-f1c9-11e9-bc34-0050562b3b5a:1
master的gtid为:
6bf23ca7-f1c9-11e9-bc34-0050562b3b5a:1,f50c4171-f1c4-11e9-8de8-0050563a3356:1-68740
slave的gtid为:
6bf23ca7-f1c9-11e9-bc34-0050562b3b5a:1-3,f50c4171-f1c4-11e9-8de8-0050563a3356:1-68740
从上面可看出slave有在自己这边执行了两个事务,而且这两个事务master那边没有同步过的。然后我就想,如果slave停止了,从新和主进行主从同步。那么会不会同步有错误。因为slave这边自己执行了两个事务,而master那边是没有的。
在slave那边,stop slave; start slave; ##发现同步正常
在slave那边,stop slave; reset slave all; start slave; ##发现同步正常
这可能是bin-log日志影响吗?于是我把slave的bin-log日志清掉。
在slave那里,flush logs; 弄个最新的bin-log出来
然后执行 purge binary logs to 'bin-log-mysqld5.000016';
然后 stop slave;start slave; ##发现同步正常
在slave那边,stop slave; reset slave all; start slave; ##发现同步正常
这样的话,加多一个slave3,让master同步slave3的数据,然后slave3写入几个事务,然后让slave2同步slave3的数据。此时再让slave2同步master去,看看能不能正常同步。
测试结果正常:是不是slave同步master,只要发现gtid比salve小的,才同步给slave。如果slave的比master的都大,那么就不会同步过来了,也不会报错。
网友评论