主頁(yè) > 知識(shí)庫(kù) > 一文帶你了解Mysql主從同步原理

一文帶你了解Mysql主從同步原理

熱門標(biāo)簽:高清地圖標(biāo)注道路 智能外呼系統(tǒng)復(fù)位 400電話可以辦理嗎 大眾點(diǎn)評(píng)星級(jí)酒店地圖標(biāo)注 臨清電話機(jī)器人 話務(wù)外呼系統(tǒng)怎么樣 拉卡拉外呼系統(tǒng) 云南電商智能外呼系統(tǒng)價(jià)格 外東北地圖標(biāo)注

Mysql 主從同步原理簡(jiǎn)析

在開始講述原理的情況下,我們先來做個(gè)知識(shí)匯總,
究竟什么是主從,為什么要搞主從,可以怎么實(shí)現(xiàn)主從,mysql主從同步的原理

1、什么是主從

其實(shí)主從這個(gè)概念非常簡(jiǎn)單
主機(jī)就是我們平常主要用來讀寫的服務(wù),我們稱之為master(主人、主宰)
從機(jī)就是主機(jī)進(jìn)行的一個(gè)擴(kuò)展,他一般不會(huì)主動(dòng)用來讀寫,我們稱之為slave( [sleɪv] 奴隸)
從機(jī)上的數(shù)據(jù)是從主機(jī)通過某種形式獲取到而寫入從機(jī)的,理論上從機(jī)并不能直接獲取到來自外界的數(shù)據(jù)。

2、為什么要搞主從呢?

最早搞主從是為了主備,也就是master是主機(jī),salve是備機(jī)。因?yàn)樵缙谲浖臄?shù)據(jù)量與并發(fā)性并不高。主機(jī)完全支撐得住日常的使用。
所以通過主備的形式,保證db高可用,當(dāng)檢測(cè)到主db掛掉的時(shí)候,自動(dòng)將服務(wù)的數(shù)據(jù)源切換到備db。
隨著業(yè)務(wù)的發(fā)展,大家發(fā)現(xiàn)單master往往很難支撐的住業(yè)務(wù)的需要,因此對(duì)傳統(tǒng)的主從開始進(jìn)行了擴(kuò)展。


(1)一主一從
從機(jī)不僅僅作為備機(jī),而且還作為讀數(shù)據(jù)源的db,業(yè)務(wù)服務(wù)寫數(shù)據(jù)時(shí),寫到主機(jī),讀數(shù)據(jù)時(shí),從從機(jī)上讀。從而降低主機(jī)的壓力
(2)一主多從
主寫從讀之后,我們發(fā)現(xiàn)單一的從節(jié)點(diǎn)在支撐業(yè)務(wù)查詢數(shù)據(jù)時(shí),還是存在性能瓶頸,因此將從機(jī)進(jìn)行水平擴(kuò)展,實(shí)現(xiàn)多從。
(3)雙M
從機(jī)的身份提升為主機(jī),兩個(gè)主機(jī)互為對(duì)方的從機(jī),共同分擔(dān)讀寫壓力
(4)聯(lián)級(jí)復(fù)制
聯(lián)級(jí)復(fù)制和一主多從比較相像,區(qū)別是次級(jí)別的從機(jī)的數(shù)據(jù)來源是來自于從機(jī)而不再是主機(jī)。這樣主要是考慮到從機(jī)變多后,同步數(shù)據(jù)對(duì)主機(jī)性能的影響
(5)多主一從
多主應(yīng)用在寫多讀少的場(chǎng)景,通過多主降低主機(jī)的壓力,同時(shí)通過1個(gè)從機(jī),來完成讀操作和數(shù)據(jù)備份的能力。

3、如何實(shí)現(xiàn)主從同步呢?

大家不要把主從同步想的太難以理解,其實(shí)非常簡(jiǎn)單,對(duì)于一個(gè)軟件工程師來說,你只要會(huì)寫代碼,能從主庫(kù)中查出數(shù)據(jù),然后連接到備庫(kù)里,將數(shù)據(jù)寫進(jìn)去,就可以了。這就是最易于理解的主從同步。
但是這種太粗糙了,性能也不好,所以mysql自身就已經(jīng)提供了一套完整的主從同步機(jī)制,保證數(shù)據(jù)可以高效的從主機(jī)到從機(jī)的同步過去。
除去mysql 自身的主從同步,業(yè)界還有一些通過組件來支持的,比如阿里的canal,這個(gè)主要是為了更靈活的進(jìn)行數(shù)據(jù)同步,比如對(duì)同步數(shù)據(jù)進(jìn)行解析,同步的從機(jī)可以不再使用mysql,而是其他存儲(chǔ)服務(wù)等。

4、mysql 主從同步的原理

mysql自身實(shí)現(xiàn)主從同步,主要是利用到binlog 日志。
由于不是本文的重點(diǎn),這里簡(jiǎn)單說下binlog日志:
它是mysql用來記錄db改變的日志,
比如某條數(shù)據(jù)的值從0改為1 (DML語(yǔ)句)
比如某張表被刪除了 (DDL語(yǔ)句)
binlog 有三種形式:
(1)statement:記錄具體引起改動(dòng)的操作語(yǔ)句,比如insert xxxxx....
(2)row:基于數(shù)據(jù)行的,原來數(shù)據(jù)行是xx值改為了yy 值,這種一般占用空間比較大
(3)mixed:混合模式,由服務(wù)自己來決定此次變更采用哪種形式。
當(dāng)sql操作寫入binlog,就已經(jīng)算作sql執(zhí)行成功了,而不是寫入到對(duì)應(yīng)磁盤中(刷盤)。所以binlog中對(duì)應(yīng)的值,我們可以理解為就是mysql的一個(gè)映射,同步mysql數(shù)據(jù)不同撈磁盤中的數(shù)據(jù)進(jìn)行同步,而只需要同步binlog日志就行。
具體的同步原理如下:
(1)主從同步設(shè)置好之后(進(jìn)行相關(guān)的諸如ip,端口,服務(wù)id,等操作設(shè)置后)
(2)相關(guān)變動(dòng)會(huì)寫入到binlog中
(3)maser會(huì)啟動(dòng)一個(gè)線程:binlog dumplog 線程,這個(gè)線程會(huì)通知從機(jī),當(dāng)前存在SQL變更,并將binlog的變動(dòng)發(fā)送到從機(jī)上
(4)從機(jī)收到請(qǐng)求后,會(huì)啟動(dòng)線程:i/o線程 ,該線程會(huì)將收到的binlog日志加載到中繼日志delay log中
(5)從機(jī)中的另外一個(gè)線程:SQL 線程會(huì)讀取relay日志中的信息,刷新到從機(jī)中
具體可見下圖

根據(jù)CAP理論(不清楚這點(diǎn)這里),這套架構(gòu)很明顯無(wú)法保證實(shí)時(shí)的數(shù)據(jù)一致性,如:
1、寫入主機(jī)后,主機(jī)立刻掛掉,進(jìn)行主備倒換,此時(shí)可能會(huì)丟失數(shù)據(jù),
2、當(dāng)主機(jī)發(fā)生寫操作,因?yàn)橥綌?shù)據(jù)到從機(jī)的binlog中會(huì)存在延遲,所以立刻查詢從機(jī)時(shí),可能會(huì)無(wú)法查詢到數(shù)據(jù),針對(duì)這種情況
解決辦法:
1、啟用半同步復(fù)制,之前主從同步信息是異步同步,不影響主庫(kù)的邏輯,半同步復(fù)制則是主機(jī)等待binlog寫入到(至少一個(gè))從機(jī)的中繼日志中,主機(jī)才確定返回給客戶端。
2、強(qiáng)制敏感數(shù)據(jù)調(diào)用主機(jī),但是這樣使讀寫分離的概念模糊化,不是很推薦
3、使用中間件(canal),大致原理是當(dāng)寫請(qǐng)求發(fā)生時(shí),記錄到cache中,并預(yù)估好同步到從機(jī)的時(shí)間。
此時(shí)寫入主庫(kù)數(shù)據(jù),查詢從庫(kù)時(shí),會(huì)根據(jù)寫入到cache的預(yù)估時(shí)間判定此時(shí)從機(jī)上的時(shí)間,判定是等待從庫(kù),還是直接查詢從庫(kù)

到此這篇關(guān)于一文帶你了解Mysql主從同步原理的文章就介紹到這了,更多相關(guān)Mysql主從同步原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決MySQL主從數(shù)據(jù)庫(kù)沒有同步的兩種方法
  • Mysql數(shù)據(jù)庫(kù)的主從同步配置
  • Docker 環(huán)境運(yùn)行 Mysql 和開啟 Binlog 配置主從同步的設(shè)置方法
  • MySQL 主從同步,事務(wù)回滾的實(shí)現(xiàn)原理
  • MySQL數(shù)據(jù)庫(kù)主從同步實(shí)戰(zhàn)過程詳解
  • MySQL主從同步中的server-id示例詳解
  • MySQL數(shù)據(jù)庫(kù)的主從同步配置與讀寫分離
  • MySQL主從同步原理及應(yīng)用

標(biāo)簽:福州 溫州 阿里 定西 無(wú)錫 揚(yáng)州 山西 三明

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一文帶你了解Mysql主從同步原理》,本文關(guān)鍵詞  一文,帶你,了解,Mysql,主從,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一文帶你了解Mysql主從同步原理》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于一文帶你了解Mysql主從同步原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章