Mysql主從複製的實現細節

來源:互聯網
上載者:User

標籤:mysql主從複製原理



MySQL複製功能使用三個線程實現,一個在主伺服器上,另一個在從伺服器上:

Binlog(二進位日誌)轉儲線程。主站建立一個線程,在從站串連時將二進位日誌內容發送給從站。該線程可以在主伺服器上的SHOW PROCESSLIST輸出中標識為Binlog轉儲線程。

二進位日誌轉儲線程在主伺服器的二進位日誌上擷取一個鎖,用於讀取要發送給從伺服器的每個事件。一旦事件被讀取,即使在事件被發送到從裝置之前,鎖也被釋放。


        從屬I / O線程。當從伺服器上發出START SLAVE語句時,從伺服器建立一個I / O線程,該線程串連到主伺服器並要求它發送記錄在其二進位日誌中的更新。

    

        從I / O線程讀取主伺服器的Binlog轉儲線程發送的更新(請參閱上一項),並將它們複製到包含從伺服器中繼日誌的本地檔案中。


    此線程的狀態在SHOW SLAVE STATUS的輸出中顯示為Slave_IO_running,或在SHOW STATUS的輸出中顯示為Slave_running。


    從屬SQL線程。從站建立一個SQL線程來讀取由從站I / O線程寫入的中繼日誌並執行其中包含的事件。


在前面的描述中,每個主/從串連有三個線程。擁有多個從站的主站為每個當前串連的從站建立一個二進位日誌轉儲線程,並且每個從站都有自己的I / O和SQL線程。


從機使用兩個線程將讀取更新與主機分離,並將其執行為獨立任務。因此,如果語句執行速度較慢,則閱讀語句的任務不會減慢。例如,如果從伺服器沒有運行一段時間,它的I / O線程可以在從伺服器啟動時快速地從主伺服器擷取所有二進位日誌內容,即使SQL線程遠遠落後。如果從站在SQL線程執行完所有提取的語句之前停止,那麼I / O線程至少會提取所有內容,以便將語句的安全副本本機存放區在從站的中繼日誌中,以備下次執行奴隸開始。


SHOW PROCESSLIST語句提供了一些資訊,告訴你在主伺服器和從伺服器上發生的複製事件


以下樣本說明了SHOW PROCESSLIST的輸出中三個線程是如何顯示的。


在主伺服器上,SHOW PROCESSLIST的輸出如下所示:

mysql> SHOW PROCESSLIST\G

*************************** 1. row ***************************

Id: 2   #Binlog轉儲複製線程ID

User: root

Host: localhost:32931

db: NULL

Command: Binlog Dump

Time: 94

State: Has sent all binlog to slave; waiting for binlog to #狀態資訊表明所有未完成的更新已發送到從站,並且主站正在等待更多更新發生

be updated

Info: NULL


這裡,線程2是一個Binlog轉儲複製線程,它為串連的從伺服器提供服務。 狀態資訊表明所有未完成的更新已發送到從站,並且主站正在等待更多更新發生。 如果在主伺服器上看不到Binlog Dump線程,則表示複製未運行; 也就是說,目前沒有奴隸串連。


#——————————————————————————————————————————————————————————————————————————————————————————————————————


在從屬伺服器上,SHOW PROCESSLIST的輸出如下所示:

mysql> SHOW PROCESSLIST\G

*************************** 1. row ***************************

Id: 10 #線程10是與主伺服器通訊的I/O線程

User: system user

Host:

db: NULL

Command: Connect

Time: 11

State: Waiting for master to send event

Info: NULL

*************************** 2. row ***************************

Id: 11 #線程11是處理儲存在中繼日誌中的更新的SQL線程

User: system user

Host:

db: NULL

Command: Connect

Time: 11

State: Has read all relay log; waiting for the slave I/O

thread to update it

Info: NULL


狀態資訊指示線程10是與主伺服器通訊的I / O線程,線程11是處理儲存在中繼日誌中的更新的SQL線程。 當SHOW PROCESSLIST運行時,兩個線程都處於空閑狀態,等待進一步更新。


Mysql主從複製的實現細節

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.