中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中怎么實現異步復制

發布時間:2021-08-04 14:32:38 來源:億速云 閱讀:97 作者:Leah 欄目:數據庫

這篇文章將為大家詳細講解有關MySQL中怎么實現異步復制,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、MYSQL復制架構衍生史

在2000年,MySQL  3.23.15版本引入了Replication。Replication作為一種準實時同步方式,得到廣泛應用。這個時候的Replicaton的實現涉及到兩個線程,一個在Master,一個在Slave。Slave的I/O和SQL功能是作為一個線程,從Master獲取到event后直接apply,沒有relay  log。這種方式使得讀取event的速度會被Slave replay速度拖慢,當主備存在較大延遲時候,會導致大量binary  log沒有備份到Slave端。

在2002年,MySQL 4.0.2版本將Slave端event讀取和執行獨立成兩個線程(IO線程和SQL線程),同時引入了relay  log。IO線程讀取event后寫入relay log,SQL線程從relay  log中讀取event然后執行。這樣即使SQL線程執行慢,Master的binary  log也會盡可能的同步到Slave。當Master宕機,切換到Slave,不會出現大量數據丟失。

在2010年MySQL  5.5版本之前,一直采用的是這種異步復制的方式。主庫的事務執行不會管備庫的同步進度,如果備庫落后,主庫不幸crash,那么就會導致數據丟失。于是在MySQL在5.5中就順其自然地引入了半同步復制,主庫在應答客戶端提交的事務前需要保證至少一個從庫接收并寫到relay  log中。

在2016年,MySQL在5.7.17中引入了一個全新的技術,稱之為InnoDB Group Replication。目前官方MySQL  5.7.17基于Group replication的全同步技術已經問世,全同步技術帶來了更多的數據一致性保障。

下圖對應MySQL幾種復制類型,分別是異步、半同步、全同步

MySQL中怎么實現異步復制

二、異步復制(Asynchronous replication)

1. 邏輯上

MySQL默認的復制即是異步的,主庫在執行完客戶端提交的事務后會立即將結果返給給客戶端,并不關心從庫是否已經接收并處理,這樣就會有一個問題,主如果crash掉了,此時主上已經提交的事務可能并沒有傳到從庫上,如果此時,強行將從提升為主,可能導致新主上的數據不完整。

2. 技術上

主庫將事務 Binlog 事件寫入到 Binlog 文件中,此時主庫只會通知一下 Dump 線程發送這些新的  Binlog,然后主庫就會繼續處理提交操作,而此時不會保證這些 Binlog 傳到任何一個從庫節點上。

3. 原理圖

MySQL中怎么實現異步復制

(1) 在Slave 服務器上執行sart slave命令開啟主從復制開關,開始進行主從復制。

(2) 此時,Slave服務器的IO線程會通過在master上已經授權的復制用戶權限請求連接master服務器,并請求從執行binlog日志文件的指定位置(日志文件名和位置就是在配置主從復制服務時執行change  master命令指定的)之后開始發送binlog日志內容

(3) Master服務器接收到來自Slave服務器的IO線程的請求后,其上負責復制的IO線程會根據Slave服務器的IO線程請求的信息分批讀取指定binlog日志文件指定位置之后的binlog日志信息,然后返回給Slave端的IO線程。返回的信息中除了binlog日志內容外,還有在Master服務器端記錄的IO線程。返回的信息中除了binlog中的下一個指定更新位置。

(4) 當Slave服務器的IO線程獲取到Master服務器上IO線程發送的日志內容、日志文件及位置點后,會將binlog日志內容依次寫到Slave端自身的Relay  Log(即中繼日志)文件(Mysql-relay-bin.xxx)的最末端,并將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取master端新binlog日志時能告訴Master服務器從新binlog日志的指定文件及位置開始讀取新的binlog日志內容

(5) Slave服務器端的SQL線程會實時檢測本地Relay Log 中IO線程新增的日志內容,然后及時把Relay LOG  文件中的內容解析成sql語句,并在自身Slave服務器上按解析SQL語句的位置順序執行應用這樣sql語句,并在relay-log.info中記錄當前應用中繼日志的文件名和位置點

三、全同步復制(Fully synchronous replication)

1. 邏輯上

指當主庫執行完一個事務,所有的從庫都執行了該事務才返回給客戶端。因為需要等待所有從庫執行完該事務才能返回,所以全同步復制的性能必然會收到嚴重的影響。

2. 技術上

當主庫提交事務之后,所有的從庫節點必須收到、APPLY并且提交這些事務,然后主庫線程才能繼續做后續操作。但缺點是,主庫完成一個事務的時間會被拉長,性能降低。

3. 原理圖

MySQL中怎么實現異步復制

四、半同步復制(Semisynchronous replication)

1. 邏輯上

是介于全同步復制與全異步復制之間的一種,主庫只需要等待至少一個從庫節點收到并且 Flush Binlog 到 Relay Log  文件即可,主庫不需要等待所有從庫給主庫反饋。同時,這里只是一個收到的反饋,而不是已經完全完成并且提交的反饋,如此,節省了很多時間。

2. 技術上

介于異步復制和全同步復制之間,主庫在執行完客戶端提交的事務后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay  log中才返回給客戶端。相對于異步復制,半同步復制提高了數據的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復制最好在低延時的網絡中使用。

3. 原理圖

master將每個事務寫入binlog(sync_binlog=1),傳遞到slave刷新到磁盤(sync_relay=1),同時主庫提交事務(commit)。master等待slave反饋收到relay  log,只有收到ACK后master才將commit OK結果反饋給客戶端。

MySQL中怎么實現異步復制

關于MySQL中怎么實現異步復制就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

老河口市| 红安县| 永宁县| 神木县| 九龙城区| 报价| 鄢陵县| 双鸭山市| 宜川县| 济南市| 阿瓦提县| 京山县| 中卫市| 盱眙县| 凤庆县| 柏乡县| 如东县| 南昌县| 江西省| 长垣县| 新乡县| 郎溪县| 宣城市| 平顺县| 依安县| 伊金霍洛旗| 邯郸县| 黄山市| 德保县| 阳春市| 高邮市| 广平县| 辽阳市| 侯马市| 华蓥市| 招远市| 通道| 江阴市| 大竹县| 辽中县| 天等县|