1. 程式人生 > >淺談Mysql5.7的Replication相關增強

淺談Mysql5.7的Replication相關增強

      近日ORACLE釋出幾個新的功能在最新的Mysql5.7.11的版本上,以及在我們公司新一代產品研發中,我們的資料庫選型也是mysql5.7.11,由此有了此篇文章。本篇文字主要是研究Mysql5.7相比之前版本Replication的功能的改變以及增加,主要內容包括以下:

(1)   Mysql的Replication基礎

(2)   Mysql5.7的半同步複製改進

(3)   Mysql5.7的多源複製增加

(4)   Mysql5.7對於線上變更復制方式的支援

一.Mysql的Replication基礎

       Replication,即複製,不管是最近流行的nosql資料庫以及大資料,還是傳統的資料庫,基本都會具備複製的特性,那麼資料複製技術有哪些特點呢?(1)負載均衡(2)資料備份以及分佈(3)高可用和容錯。同樣,Mysql也具備這些特性,那麼Mysql是怎樣完成複製工作的呢?如下圖所示:


(1)   master將改變記錄(記錄叫做二進位制日誌事件,binarylog events)到二進位制日誌(binary log):在每個事務更新資料完成之前,master在二日誌記錄這些改變。MySQL將事務序列的寫入二進位制日誌,即使事務中的語句都是交叉執行的。在事件寫入二進位制日誌完成後,master通知儲存引擎提交事務;

(2)    slave將master的binary log events拷貝到它的中繼日誌(relay log):當發出start slave 時,首先slave建立一個I/O執行緒,以連線master並讓它傳送記錄在其二進位制日誌中的語句,然後開始binlog dump process,slave的I/O執行緒讀取master的BinlogDump執行緒傳送的內容並將該資料拷貝到從伺服器資料目錄中的本地檔案中,即中繼日誌(relay log);

(3)    slave建立SQL thread用於讀取中繼日誌中並執行更新操作:SQL thread從中繼日誌讀取中繼日誌,更新slave的資料,使其與master中的資料一致。

        以上介紹的是Mysql的非同步複製,非同步複製意味著在把資料從一臺機器拷貝到另一臺機器時有一個延時,這意味著當應用系統的事務提交已經確認時資料並不能在同一時刻拷貝到slave。通常這個延時是由網路頻寬、資源可用性和系統負載決定的。如果slave不幸落後,而更不幸的是master此時又出現Crash(例如宕機),這時slave中的資料就是不完整的。簡而言之,在master發生故障的時候,我們無法使用slave來繼續提供資料一致的服務。於是,便產生了半同步複製的概念

二.Mysql5.7的半同步複製改進

        半同步複製即當master在將自己binary log發給slave上的時候,要確保slave已經接受到了這個二進位制日誌以後,才會返回資料給客戶端,目的在於事務環境下保持主從一致。但是,Mysql5.6的存在一些缺陷導致資料存在某些條件無法保證一致性。Mysql5.6的半步複製的過程圖如下:


       存在的問題是在slave進行Waiting Slave dump之前,master進行了Storage Commit事務操作,假如此時恰好master宕機,導致master與slave的資料不一致,Mysql5.7對於這一現象進行改進,具體的過程圖如下:

      Mysql5.7在Wait slave dump後,進行Storage Commit事務操作,這樣保證從已經有了資料,即便master宕機,也能保證資料的一致性。

三.Mysql5.7的多源複製增加

        Multi-source replication即多源複製,這對採用分庫分表的同學絕對是個超級重磅福音,可以把多個MASTER的資料歸併到一個例項上, 有助於提高SLAVE伺服器的利用率,實際業務需求幫助作用也比較大。不過如果是同一個表的話,會存在主鍵和唯一索引衝突的風險,需要提前做好規劃。多源複製的概念結構圖如下所示:


        Slave如何區別資料到底來自哪個Master呢?Mysql5.7提出了通訊渠道(channel)的概念,每一個通訊渠道都是一個slave從master獲得二進位制日誌的連結。。這意味著每個通訊渠道都得有一個IO thread .我們需要執行不同的 “change master” 命令, 對於每一個主伺服器。我們需要用到 “for channel”這個引數來提供通訊連結的名字。

四.Mysql5.7對於線上變更復制方式的支援

        Mysql支援兩種複製方式,一種是基於日誌點的複製方式,一種是基於GTID的複製方式,在Mysql5.7之前完成這兩種方式的切換是需要重啟master,但在Mysql5.7中不需要重啟master伺服器,這對於生產環境變更作用很大。

五.總結

       本次主要分享自己對於Mysql5.7的複製,半同步複製,多源複製,以及線上變更復制方式的認識,以及與之前版本的區別,更多的是理論的講述,沒有進行例項講述,我會在後續的章節編寫每個場景的實踐過程。


相關推薦

Mysql5.7的Replication相關增強

      近日ORACLE釋出幾個新的功能在最新的Mysql5.7.11的版本上,以及在我們公司新一代產品研發中,我們的資料庫選型也是mysql5.7.11,由此有了此篇文章。本篇文字主要是研究M

OpenGL 中相關阻塞問題

    昨天我遇到一個問題,問題如下:     我使用了延遲渲染,我的渲染流程是:Pass1 --> CUDA平行計算 -->Pass2     CUDA平行計算中需要使用Pass1渲染生成的兩張紋理,然而我在GPU端使用CUDA計算時發現紋理為空(資料全是0值),但是如果將兩張紋

JAVA中“增強”類的某個方法的幾個中方法!

exc 目標 byte 相同 nbsp 優點 method value oca 一、繼承 使用場景:能夠控制這個類的構造的時候,才可以使用繼承。  優點:簡單容易使用, 缺點:耦合性大大的增強,不利於後期的維護,所以對於繼承這種方法,謹慎使用。 代碼實現:二、裝飾者模式 

線程池(下):相關試驗及註意事項

DG 執行 html ble DC resp lin 不足 4.0 三個月,整整三個月了,我忽然發現我還有三個月前的一個小系列的文章沒有結束,我還欠一個試驗!線程池是.NET中的重要組件,幾乎所有的異步功能依賴於線程池。之前我們討論了線程池的作用、獨立線程池的存在意義,以及

LinuxSUID,SGID,Sticky粘滯位對目錄以及文件的相關作用

刪除文件 分配 神奇 淺談 出了 哪裏 配置 cdd 可執行程序 我們知道在Linux中,root管理員的權限是很大的,能夠支持執行絕大部分程序以及命令進而對文件進行相對應的修改,寫入。當然這些作用只能體現在root管理員上。但是有一個現象,有些普通用戶是可以通過p

影象處理方向的就業前景 & 心得感悟 & 一些相關期刊

數字影象處理領域可以投稿的期刊:Computer Vision and Image Processing    IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI) IEEE International Journal of

js裡的attributes和與之相關的一些屬性

       在前端裡,想要對靜態的HTML變得更加的動態,就必須要對HTML的dom進行操作,dom猶如一個樹,樹的最底層是文件節點,這個節點順著上來就到了html節點,也就是根節點。這個根節點有兩個分支,一個是body,另一個是head。head裡面有很多個子節點,必須

大資料開發及和大資料相關的技術

在現如今,隨著網際網路技術飛速的發展,目前有不少朋友詢問關於大資料方面的問題,比如什麼是大資料開發啊,和大資料相關的技術是什麼呢等問題,我們今天就淺談一下大資料開發及和大資料相關的技術的問題。 首先,大資料(big data),指無法在一定時間範圍內用常規軟體工具進行捕捉、管理和處理的資料集合,是需

git撤銷回退命令相關用法

初來公司實習,每次改完程式碼後都需要用程式碼管理工具git提交到程式碼庫。由於剛開始對 git 並不熟悉,只會簡單的 commit,push 指令,一旦提交出了問題需要撤銷回退的話就不知道該怎麼辦了。經過一段時間的研究,總算是把裡面相關原理搞懂了,遇到git提交

Android之SurfaceFlinger相關介紹(三)

3.3 Surface Java層相關封裝 主要介紹三個類,對應如下: Java C++ SurfaceSession.java SurfaceComposeClient 對應JNI檔案為: android_view_surfacesession.cpp

演算法和資料結構----無向圖相關演算法基礎

最近幾個專案用到了求所有最小哈密爾頓迴路,貪婪遍歷查詢等演算法,都是自己想或者查論文,雖然都是資料結構的基礎內容,但感覺比較零散,很糾結。 前幾天突然聽到“圖計算”這個名詞,覺得應該是找到組織了,因此轉載如下,後續會不斷轉載其他有用的文章。 以下內容轉載自:http:/

庫存扣減相關問題

問題場景 物品W現在庫存剩餘1個, 使用者P1,P2同時購買.則只有1人能購買成功.(前提是不允許超賣) 秒殺也是類似的情況, 只有1件商品,N個使用者同時搶購,只有1人能搶到.. 這裡不談秒殺設計,不談使用佇列等使請求序列化,就談下怎麼用鎖來保證資料正

動態規劃以及相關的股票問題

動態規劃 1 概念   動態規劃演算法是通過拆分問題,定義問題的狀態與狀態之間的關係,使得問題能夠以遞推(或者說分治)的方式去解決。在學習動態規劃之前需要明確掌握幾個重要概念。   階段:對於一個完整的問題過程,適當的切分為若干個相互聯絡的子問題,每次在求解一個子問題,則對應一個階段,整個問題的求解轉化為按照

什麼是動態規劃以及相關的「股票」演算法題:一網打盡「買賣股票的最佳時機」

本文首發於公眾號「五分鐘學演算法」,是圖解 LeetCode 系列文章之一。 個人網站:https://www.cxyxiaowu.com 動態規劃 1 概念   動態規劃演算法是通過拆分問題,定義問題狀態和狀態之間的關係,使得問題能夠以遞推(或者說分治)的方式去解決。在學習動態規劃之前需要明確

計算機領域及職業憧憬

計算機科學 軟件工程師 計算機行業 雖然自己的專業是計算機,可是慚愧的說其實對這個行業的了解並不是很多,大多時候是通過網絡或者新聞才了解到的。據我所知,現在計算機行業是非常流行的行業,當然競爭也是十分激烈,信息化的時代我們的生活都離不開與計算機有關的東西,比如上學坐公共汽車,需要刷卡,這就是

Java學習筆記——數據結構與Java集合框架(第一篇、List)

技術分享 emp 鏈表 adc 下標 -c nod nal integer 橫看成嶺側成峰,遠近高低各不同。不識廬山真面目,只緣身在此山中。               ——蘇軾 這一塊兒學的是雲裏霧裏,咱們先從簡單的入手。逐漸的撥開迷霧見太陽。本次先做List集合的三

HTTP請求與響應

tcp 方法 刪除 請求 連接 客戶機 cin tex 文件 HTTP協議用於客戶端和服務器之間的通信,請求訪問的一段是客戶端,提供資源響應的一段是服務器端。 HTTP通信是采用請求應答的方式來進行的,客戶端發出請求,服務器響應。如果沒有客戶端的請求,服務器端是不進行任

C#解析網頁

多說 .text 了解 light path text load 所有 web 最近做了一個項目,要求獲取各大主流網頁上的關鍵信息,本人以前了解過網頁爬蟲的知識,所以想到了網頁爬蟲了實現功能 第一次嘗試: 采用webclient獲取遠程網頁的內容,然後采用正則表達式進行過濾

三層

數據交換 接受 數據庫 業務 傳輸數據 文本文 項目結構 三層架構 project 三層劃分 三層架構通常意義上就是將整個業務劃分為:表現層(UI),業務邏輯層(BLL),數據訪問層(DAL)。三層並非.net 的專利,而是一個廣譜的框架設計思想,根本上是為了解決高

io流

public 文件夾 parent 文章 IO流淺談 在這篇文章裏,我會分別和大家聊字節流和字符流 一字節流 File File:文件和目錄(文件夾)路徑名的抽象表示形式。 File的構造方法: File(String pathname):把一個路徑名稱封裝成F