今天看到MySQL5.5放出了第一個版本MySQL 5.5 Community Edition - Milestone Release,最大的加強莫過於加入了Semi Sync Replication的支持(雖然仍不完善)。php
這裏作一個科普,簡單介紹一下Semisynchronous Replication:html
1. Why Semisynchronous Replication?mysql
以前版本的MySQL Replication都是異步(asynchronous)的,主庫在執行完一些事務後,是不會管備庫的進度的。若是備庫不幸落後,而更不幸的是主庫此時又出現Crash(例如宕機),這時備庫中的數據就是不完整的。簡而言之,在主庫發生故障的時候,咱們沒法使用備庫來繼續提供數據一致的服務了。sql
Semisynchronous Replication則必定程度上保證提交的事務已經傳給了至少一個備庫。網絡
2. 爲何是Semi synchronous而不是Full synchronous?session
Semi synchronous中,僅僅保證事務的已經傳遞到備庫上,可是並不確保已經在備庫上執行完成了。異步
此外,還有一種狀況會致使主備數據不一致。在某個session中,主庫上提交一個事務後,會等待事務傳遞給至少一個備庫,若是在這個等待過程當中主庫Crash,那麼也可能備庫和主庫不一致,這是很致命的。(在主庫恢復後,能夠經過參數Rpl_semi_sync_master_no_tx觀察)async
3. 若是主備之間鏈接出現故障,主庫是否會一直等待?post
若是主備網絡故障或者備庫掛了,主庫在事務提交後等待10秒(rpl_semi_sync_master_timeout的默認值)後,就會繼續。這時,主庫就會變回原來的異步狀態。spa
4. 最後
且不論5.5是否穩定,如今的Semi synchronous Replication也仍是很不完善的,但願可以繼續健壯直至穩定。