主从同步一致性保证分为三种策略:
1. 异步复制
主库提交事务后直接将结果返回给客户端,并不关心从库是否成功接收并处理。
2. 半同步复制
Mysql在5.5版本引入了半同步复制,主库在应答客户端提交的事务前要至少保证一个从库接受并写到relay log中
semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之前提交事务的方式。rpl_semi_sync_master_wait_point该参数有两个值:
AFTER_COMMIT(5.6版本默认值)
master将每个事务写入binlog(sync_binlog=1),传递到slave刷新到磁盘(sync_relay=1),同时主库提交事务。master等待slave反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。
AFTER_SYNC(5.7版本引入,并为默认值)
master将每个事务写入binlog , 传递到slave刷新到磁盘(relay log)。master等待slave反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。
简单说,after_commit在主机事务提交后将日志传送到从机,after_sync是先传送到从机后再提交事务
3. 全同步复制
当主库提交事务之后,所有的从库节点必须收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。
很明显的缺点就是,主库完成一个事务的时间被拉长,性能降低。
参考: