MySQL Semi Sync Replication

徘徊边缘 提交于 2020-03-18 08:02:20

MySQL 5.5 Semi Sync Replication

2009-12-16  |  23:48分类:MySQL  |  标签:MySQL5.5Replicationsemi-syncsemi-sync replication  |  

今天看到MySQL5.5放出了第一个版本MySQL 5.5 Community Edition - Milestone Release,最大的增强莫过于加入了Semi Sync Replication的支持(虽然仍不完善)。

这里做一个科普,简单介绍一下Semisynchronous Replication:

1. Why Semisynchronous Replication?

之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。

Semisynchronous Replication则一定程度上保证提交的事务已经传给了至少一个备库。

2. 为什么是Semi synchronous而不是Full synchronous?

Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。

此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。(在主库恢复后,可以通过参数Rpl_semi_sync_master_no_tx观察)

3. 如果主备之间连接出现故障,主库是否会一直等待?

如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。

4. 最后

且不论5.5是否稳定,现在的Semi synchronous Replication也还是很不完善的,希望能够继续健壮直至稳定。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!