MySQL異步復制、半同步復制詳解


 

MySQL數據復制的原理圖大致如下:

從上圖我們可以看出MySQL數據庫的復制需要啟動三個線程來實現:

   其中1個在主服務器上,另兩個在從服務器上。當發出START SLAVE時,從服務器創建一個I/O線程,以連接主服務器並讓它發送記錄在其二進制日志中的語句。主服務器創建一個線程將二進制日志中的內容發送到從服務器。該線程可以識別為主服務器上SHOW PROCESSLIST的輸出中的Binlog Dump線程。從服務器I/O線程讀取主服務器Binlog Dump線程發送的內容並將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日志。第3個線程是SQL線程,是從服務器創建用於讀取中繼日志並執行日志中包含的更新。

   在前面的描述中,每個從服務器有3個線程。有多個從服務器的主服務器創建為每個當前連接的從服務器創建一個線程;每個從服務器有自己的I/O和SQL線程。

   這樣讀取和執行語句被分成兩個獨立的任務。如果語句執行較慢則語句讀取任務沒有慢下來。例如,如果從服務器有一段時間沒有運行了,當從服務器啟動時,其I/O線程可以很快地從主服務器索取所有二進制日志內容,即使SQL線程遠遠滯后。如果從服務器在SQL線程執行完所有索取的語句前停止,I/O 線程至少已經索取了所有內容,以便語句的安全拷貝保存到本地從服務器的中繼日志中,供從服務器下次啟動時執行。這樣允許清空主服務器上的二進制日志,因為不再需要等候從服務器來索取其內容。

二、實列說明MySQL的主從復制架構和實現詳細過程

     主從架構數據庫的復制圖如下:

其配置詳細過程如下:

 

MySQL數據的主從復制、半同步復制和主主復制詳解 - goustzhu地盤 - 博客頻道 - CSDN.NET
http://blog.csdn.net/goustzhu/article/details/9339621

 

1、半同步復制原理圖 
   MySQL 半同步復制模式的實現-1-存儲架構-IP地址,服務器,虛擬機,用戶 

#半同步啟動需要主從兩端都需要加載安裝各自對應的semi模塊,從庫端支持半同步功能的數量至少一台;主庫端當一個事務成功提交后,並不及時反饋給前端用戶,該線程會被臨時block,等待由從庫端返回確認該條事務也同時成功寫入到relay log中的receipt(回執確認),這時主庫線程才返回給當前session告知操作完成,半同步復制並不關心在從庫一端該事務是否都被執行並被提交完成。

 

復制類型還可以分為 異步復制和半同步復制。

2、異步復制
通常沒說明指的都是異步,即主庫執行完Commit后,在主庫寫入Binlog日志后即可成功返回客戶端,無需等等Binlog日志傳送給從庫,一旦主庫宕機,有可能會丟失日志。

 

3、半同步復制

而半同步復制,是等待其中一個從庫也接收到Binlog事務並成功寫入Relay Log之后,才返回Commit操作成功給客戶端;如此半同步就保證了事務成功提交后至少有兩份日志記錄,一份在主庫Binlog上,另一份在從庫的Relay Log上,從而進一步保證數據完整性;半同步復制很大程度取決於主從網絡RTT(往返時延),以插件 semisync_master/semisync_slave 形式存在。 

 

MySQL 半同步復制模式的實現-酷辣蟲 - CoLaBug.com
http://www.colabug.com/thread-1064113-1-1.html

MySQL半同步復制 - iVictor - 博客園
http://www.cnblogs.com/ivictor/p/5735580.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM