Mysql主從同步的原理

關於實戰,請參考個人另外一篇文章:Mysql主從同步實戰

一、什麼是mysql主從同步?

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


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

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

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

  • 數據備份。segmentfault


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

首先咱們來了解master-slave的體系結構。函數

以下圖:
image_1bb0gkf461ram981c3r1fcpvia1g.png-42.4kBspa

無論是delete、update、insert,仍是建立函數、存儲過程,全部的操做都在master上。
當master有操做的時候,slave會快速的接收到這些操做,從而作同步。線程

可是,這個機制是怎麼實現的呢?3d

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

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

下面咱們來詳細的瞭解。


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

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

image_1bb0n61khccb11s91nd1r8v19d724.png-118.5kB

五、關於實戰

關於實戰,請參考個人另外一篇文章:Mysql主從同步實戰

六、參考文章

What is MySQL Replication and How Does It Work?
MySQL Master-Slave Replication on the Same Machine

更多精彩,請關注公衆號「聊聊代碼」,讓咱們一塊兒聊聊「左手代碼右手詩」的事兒。
圖片描述

相關文章
相關標籤/搜索