欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Mysql 主從同步原理簡析

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

1、什么是主從

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

2、為什么要搞主從呢?

最早搞主從是為了主備,也就是master是主機,salve是備機。因為早期軟件的數據量與并發(fā)性并不高。主機完全支撐得住日常的使用。
所以通過主備的形式,保證db高可用,當檢測到主db掛掉的時候,自動將服務的數據源切換到備db。
隨著業(yè)務的發(fā)展,大家發(fā)現單master往往很難支撐的住業(yè)務的需要,因此對傳統(tǒng)的主從開始進行了擴展。


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

3、如何實現主從同步呢?

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

4、mysql 主從同步的原理

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

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

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

相關文章

  • 在MySQL中自定義參數的使用詳解

    在MySQL中自定義參數的使用詳解

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

    防止服務器宕機時MySQL數據丟失的幾種方案

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

    MySQL的表分區(qū)詳解

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

    MySQL連接控制插件介紹

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

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

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

    MySQL聯合索引功能與用法實例分析

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

    關于mysql的時區(qū)問題

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

    mysql如何通過當前排序字段獲取相鄰數據項

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

    mysql 子查詢與連接表詳情

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

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

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

最新評論