MySQL半同步復制是一種MySQL數據庫復制技術,其主要目的是提高數據庫復制時的數據一致性和可靠性。它是針對MySQL同步復制的不足之處而引入的。與同步復制不同,半同步復制不會阻塞主庫,從而提高了其可用性。
具體來說,半同步復制的實現過程是這樣的:
(1)主庫將事務寫入binlog日志中,此時事務并未寫入磁盤,只是在內存中保存。 (2)主庫將事務寫入relay log中,在寫入過程中主庫會等待至少一個從庫收到并確認該事務,從而保證數據一致性。 (3)主庫收到至少一個從庫發送的ack(確認)信息,此時該事務被視為已提交。 (4)主庫將該事務寫入磁盤,并從本地binlog日志中刪除該事務,釋放內存空間。
從庫在接收到主庫發來的事務后,會向主庫發送一個ack確認信息。這里的“確認信息”并非簡單的響應,而是細化的信息驗證。從庫會檢查主庫發送的事務是否與從庫執行的事務一致,如果不一致從庫會向主庫發送錯誤信息。
需要注意的是,在任意時刻只有一個從庫能夠作為“半同步”備份。如果主庫和當前正備份的從庫之間的網絡連接中斷,那么有能力接替當前從庫的其他備份將會自動啟動“半同步”過程。