同步流程
mysql默认是采用的异步复制模式,流程如下:
master端
1、用户提交
2、写binlog日志
3、event监控到binlog日志变化,通知给master端的dump进程
4、dump进程通知给slave端的IO进程
5、引擎提交redo log
6、结果返回客户端程序
slave
1、IO进程从master-info中获取需要同步的文件和文件位置
2、IO进程把binlog文件和pos位置通知master端dump进程
3、master准备数据把数据同步给slave端
4、slave收到数据把数据写到relay log中
5、slave relay log写成功后给master一个成功的应答
三种同步方式
- 异步:默认同步方式,master的dump线程通知slave后,就立即提交到引擎并返回给client。如果master未完成同步binlog,发生故障切换,slave升主后可能丢数据。
- 半同步:只要同步其中一个slave成功则返回client结果;同步成功的标志:slave io线程完成写relay log。 rpl_semi_sync_master_wait_point参数有after_sync和after_commit两种方式,after_sync保证了上述同步成功的条件,在master发生故障后,切换到slave,不会丢失数据。但存在问题:1)写操作只能在master上 2)slave无法自动以及需要重新建立slave到新master的复制关系 3)旧的master服务起来后需要回归数据,否则会冲突
- 组同步:通过协商解决以上问题;1)单主时通过uuid及权重自动选组 2)