Mysql主從同步的原理

原文鏈接:https://segmentfault.com/a/1190000008663001

1、什麼是mysql主從同步?

當master(主)庫的數據發生變化的時候,變化會實時的同步到slave(從)庫。


2、主從同步有什麼好處?

  • 水平擴展數據庫的負載能力。

  • 容錯,高可用。Failover(失敗切換)/High Availability

  • 數據備份。


3、主從同步的原理是什麼?

首先我們來了解master-slave的體系結構。

如下圖:

image_1bb0gkf461ram981c3r1fcpvia1g.png-42.4kB

不管是delete、update、insert,還是創建函數、存儲過程,所有的操作都在master上。
當master有操作的時候,slave會快速的接收到這些操作,從而做同步。

但是,這個機制是怎麼實現的呢?

在master機器上,主從同步事件會被寫到特殊的log文件中(binary-log);
在slave機器上,slave讀取主從同步事件,並根據讀取的事件變化,在slave庫上做相應的更改。

如此,就實現了主從同步了!

下面我們來詳細的瞭解。


3.1主從同步事件有哪些

上面說到:

在master機器上,主從同步事件會被寫到特殊的log文件中(binary-log);

主從同步事件有3種形式:statement、row、mixed。

  • statement:會將對數據庫操作的sql語句寫入到binlog中。

  • row:會將每一條數據的變化寫入到binlog中。

  • mixed:statement與row的混合。Mysql決定什麼時候寫statement格式的,什麼時候寫row格式的binlog。

3.2在master機器上的操作

當master上的數據發生改變的時候,該事件(insert、update、delete)變化會按照順序寫入到binlog中。

binlog dump線程

當slave連接到master的時候,master機器會爲slave開啓binlog dump線程。
當master 的 binlog發生變化的時候,binlog dump線程會通知slave,並將相應的binlog內容發送給slave。

3.3在slave機器上的操作

當主從同步開啓的時候,slave上會創建2個線程。

  • I/O線程。該線程連接到master機器,master機器上的binlog dump線程會將binlog的內容發送給該I/O線程。該I/O線程接收到binlog內容後,再將內容寫入到本地的relay log。

  • SQL線程。該線程讀取I/O線程寫入的relay log。並且根據relay log的內容對slave數據庫做相應的操作。

3.4如何在master、slave上查看上述的線程?

使用SHOW PROCESSLIST命令可以查看。

如圖,在master機器上查看binlog dump線程。

image_1bb0nlnmf1g1t18hi1m6colk8rb2h.png-44.7kB

如圖,在slave機器上查看I/O、SQL線程。

image_1bb0nraek1mtr1o2r1ivr11cj1jq72u.png-57.6kB

4、講了這麼多,一圖以蔽之

image_1bb0n61khccb11s91nd1r8v19d724.png-118.5kB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章