亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2021年08月26日 16:37:14   作者:王若伊_恩賜解脫  
本文主要講解了Mysql主從同步原理,主從同步可以擴(kuò)展數(shù)據(jù)庫(kù)的負(fù)載能力、容錯(cuò)還可以數(shù)據(jù)備份等。想要了解相關(guān)內(nèi)容的朋友可以閱讀這篇文章

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

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

1、什么是主從

其實(shí)主從這個(gè)概念非常簡(jiǎn)單
主機(jī)就是我們平常主要用來(lái)讀寫的服務(wù),我們稱之為master(主人、主宰)
從機(jī)就是主機(jī)進(jìn)行的一個(gè)擴(kuò)展,他一般不會(huì)主動(dòng)用來(lái)讀寫,我們稱之為slave( [sleɪv] 奴隸)
從機(jī)上的數(shù)據(jù)是從主機(jī)通過某種形式獲取到而寫入從機(jī)的,理論上從機(jī)并不能直接獲取到來(lái)自外界的數(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ù)來(lái)源是來(lái)自于從機(jī)而不再是主機(jī)。這樣主要是考慮到從機(jī)變多后,同步數(shù)據(jù)對(duì)主機(jī)性能的影響
(5)多主一從
多主應(yīng)用在寫多讀少的場(chǎng)景,通過多主降低主機(jī)的壓力,同時(shí)通過1個(gè)從機(jī),來(lái)完成讀操作和數(shù)據(jù)備份的能力。

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

大家不要把主從同步想的太難以理解,其實(shí)非常簡(jiǎn)單,對(duì)于一個(gè)軟件工程師來(lái)說(shuō),你只要會(huì)寫代碼,能從主庫(kù)中查出數(shù)據(jù),然后連接到備庫(kù)里,將數(shù)據(jù)寫進(jìn)去,就可以了。這就是最易于理解的主從同步。
但是這種太粗糙了,性能也不好,所以mysql自身就已經(jīng)提供了一套完整的主從同步機(jī)制,保證數(shù)據(jù)可以高效的從主機(jī)到從機(jī)的同步過去。
除去mysql 自身的主從同步,業(yè)界還有一些通過組件來(lái)支持的,比如阿里的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)單說(shuō)下binlog日志:
它是mysql用來(lái)記錄db改變的日志,
比如某條數(shù)據(jù)的值從0改為1 (DML語(yǔ)句)
比如某張表被刪除了 (DDL語(yǔ)句)
binlog 有三種形式:
(1)statement:記錄具體引起改動(dòng)的操作語(yǔ)句,比如insert xxxxx....
(2)row:基于數(shù)據(jù)行的,原來(lái)數(shù)據(jù)行是xx值改為了yy 值,這種一般占用空間比較大
(3)mixed:混合模式,由服務(wù)自己來(lái)決定此次變更采用哪種形式。
當(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在MySQL中自定義參數(shù)的使用詳解

    在MySQL中自定義參數(shù)的使用詳解

    今天小編就為大家分享一篇在MySQL中自定義參數(shù)的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-11-11
  • 防止服務(wù)器宕機(jī)時(shí)MySQL數(shù)據(jù)丟失的幾種方案

    防止服務(wù)器宕機(jī)時(shí)MySQL數(shù)據(jù)丟失的幾種方案

    這篇文章主要介紹了防止服務(wù)器宕機(jī)時(shí)MySQL數(shù)據(jù)丟失的幾種方案,結(jié)合實(shí)踐介紹了Replication和Monitor以及Failover這三個(gè)項(xiàng)目的應(yīng)用,需要的朋友可以參考下
    2015-06-06
  • MySQL的表分區(qū)詳解

    MySQL的表分區(qū)詳解

    這篇文章主要介紹了MySQL的表分區(qū),例如什么是表分區(qū)、為什么要對(duì)表進(jìn)行分區(qū)、表分區(qū)的4種類型詳解等,需要的朋友可以參考下
    2014-03-03
  • MySQL連接控制插件介紹

    MySQL連接控制插件介紹

    當(dāng)連接數(shù)據(jù)庫(kù)失敗次數(shù)過多時(shí),MySQL 是否會(huì)限制登錄呢?數(shù)據(jù)庫(kù)服務(wù)端應(yīng)該怎么應(yīng)對(duì)暴力破解呢?本篇文章介紹下 MySQL 中的連接控制插件,一起來(lái)學(xué)習(xí)下此插件的作用,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程

    Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程

    mysql數(shù)據(jù)庫(kù)的重新安裝是一個(gè)麻煩的問題,很難卸除干凈,下面這篇文章主要給大家介紹了關(guān)于在Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • MySQL聯(lián)合索引功能與用法實(shí)例分析

    MySQL聯(lián)合索引功能與用法實(shí)例分析

    這篇文章主要介紹了MySQL聯(lián)合索引功能與用法,結(jié)合具體實(shí)例形式分析了聯(lián)合索引的概念、功能、具體使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • 關(guān)于mysql的時(shí)區(qū)問題

    關(guān)于mysql的時(shí)區(qū)問題

    這篇文章主要介紹了關(guān)于mysql的時(shí)區(qū)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家,
    2023-11-11
  • mysql如何通過當(dāng)前排序字段獲取相鄰數(shù)據(jù)項(xiàng)

    mysql如何通過當(dāng)前排序字段獲取相鄰數(shù)據(jù)項(xiàng)

    這篇文章主要介紹了mysql如何通過當(dāng)前排序字段獲取相鄰數(shù)據(jù)項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • mysql 子查詢與連接表詳情

    mysql 子查詢與連接表詳情

    這篇文章主要介紹了mysql 子查詢與連接表,格式化SQL 包含子查詢的SELECT語(yǔ)句難以閱讀和調(diào)試,特別是它們較為復(fù)雜時(shí)更是如此,對(duì)于能嵌套的子查詢的數(shù)目沒有限制,不過在實(shí)際使用時(shí)由于性能的限制,不能嵌套太多的子查詢,下面請(qǐng)跟雄安邊一起來(lái)看看詳細(xì)內(nèi)容吧
    2021-10-10
  • MySQL中的UTF-8與UTF8MB4:差異解析方式

    MySQL中的UTF-8與UTF8MB4:差異解析方式

    MySQL中UTF-8和UTF8MB4的區(qū)別在于編碼范圍、存儲(chǔ)需求和兼容性,UTF-8可以表示大多數(shù)常見的字符,但對(duì)于一些罕見的字符和emoji表情等,可能無(wú)法正確表示,而UTF8MB4則可以表示幾乎所有的Unicode字符,包括那些UTF-8無(wú)法表示的字符,在選擇字符集時(shí)
    2024-12-12

最新評(píng)論