《MySQL——主備一致性六問六答》

目錄

    • 備庫為什么要設置為只讀模式?
    • 備庫設置為只讀,如何與主庫保持同步更新?
    • A到B的內部流程如何?
    • binlog內容是什么?
    • `row`格式對于恢復數據有何好處
    • M-M結構的循環復制問題以及解決方案

備庫為什么要設置為只讀模式?

有這樣幾點考慮:

1、有時候一些運營類的查詢語句會被放到備庫上去查,設置為只讀可以防止誤操作

2、防止切換邏輯有bug,比如切換過程中出現雙寫( 同時寫兩個庫(A、B )),造成主備不一致

3、可以用 readonly 狀態,來判斷節點的角色

備庫設置為只讀,如何與主庫保持同步更新?

readonly的設置對于super權限用戶是無效的。用于同步的線程,就擁有super權限。

A到B的內部流程如何?

主庫接收到客戶端的更新請求后,執行內部事務的更新邏輯,同時寫binlog;

備庫B與主庫A之間維持一個長連接。主庫內部有一個線程,專門用于服務備庫B這個長連接。

一個事務日志同步的完整過程:

1、備庫B通過change master命令,設置主庫A的IP、端口、用戶名、密碼,以及請求binlog的起始位置(文件名+日志偏移量)

2、備庫B執行start slave命令,備庫啟動兩個線程io_threadsql_threadio_thread負責與主庫建立連接

3、主庫A校驗完用戶名、密碼后,按照備庫B傳過來的起始位置,讀取本地的binlog然后發給備庫B

4、備庫B拿到binlog后,寫到本地文件,稱為中轉日志(relay log)

5、sql_thread讀取中轉日志relay log ,解析日志里的命令,并執行

binlog內容是什么?

在解釋內容之前,需要知道binlog的格式。

binlog有三種格式:statementrowmixed

statement

binlog_format=statement 時,binlog 里面記錄的就是 SQL 語句的原文

在這里插入圖片描述

statement格式的binlog的缺陷有個缺陷:

主備使用的索引可能是不一致的,最終導致執行刪除時刪除的數據不一致。

**row **

row 格式的 binlog 里沒有了 SQL 語句的原文,而是替換成了兩個 event: Table_mapDelete_rows.
在這里插入圖片描述

1、 Table_map , 用于說明操作的表是test庫的表t

2、Delete_rows , 用于定義刪除的行為

binlog_format = row,binlog里面記錄了真實刪除行的主鍵id,這樣binlog傳到備庫去的時候,肯定不會出現主備刪除不同行的問題

mixed

mixed格式用于哪些場景呢?

statement格式可能會導致主備不一致,所以要使用row格式

row格式比較占空間,同時也更要耗費IO資源,影響執行速度

所以采用這種方案,采用mixed格式,MySQL自己會判斷這條SQL語句是否可能引起主備不一致,如果可能,使用row格式,否則使用statement格式。

row格式對于恢復數據有何好處

現在,越來越多場景要求使用row格式的binlog,可以從delete、insert、update三種sql語句角度看待這個問題。

使用delete語句,row格式會把被刪除的行的整行信息保存。所以刪錯之后,只需要把binlog記錄的delete語句轉成insert就能恢復了。

使用insert語句,row格式會記錄所有的字段信息。所以插入錯誤的時候,只需要把binlog記錄的insert語句轉成delete語句就能恢復了。

使用update語句,binlog會記錄修改前整行的數據和修改后的整行數據。所以如果update誤執行,只需要把event前后的兩行信息對調,再去數據庫執行,就能恢復數據了。

M-M結構的循環復制問題以及解決方案

M-S結構
M-M結構

圖1是M-S結構,但是現在常用的是M-M結構,M-M結構區別在于:節點A與節點B總是互為主備關系,所以在切換的時候就不用修改主備關系了。

M-M存在循環復制問題:

在節點A更新一個語句,把生成的binlog發給節點B。

節點B執行完更新語句后也會生成binlog。

如果A同時為B的備庫,A會把節點B新生成的binlog拿過去執行。節點A和B之間會不斷循環執行這個更新語句。

解決方案:

已知MySQL在binlog中記錄了命令第一次執行所在實例的server id。

1、規定兩個庫的server id 必須不同。若相同,則不能設定為主備關系

2、備庫接到binlog,生成與原binlog的server id相同的新的binlog

3、每個庫在收到從自己的主庫發過來的日志后,先判斷server id,如果和自己的相同,表示這個日志是自己生成的,丟棄這個日志。

所以使用M-M結構的日志執行流程如下:

1、從節點A更新的事務,binlog里記錄的都是A的server id

2、傳到節點B執行一次后,節點B生成的binlog的server id 也是A的server id

3、再傳給節點A,A判斷這個server id與自己的相同,不處理這個日志

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼管理工具

http://blogs.msdn.com/b/visualstudio/archive/2012/06/11/world-of-samples-at-your-fingertips.aspx轉載于:https://www.cnblogs.com/hebeiDGL/archive/2012/09/25/2700961.html

fyi 在郵件里是什么意思_FYI的完整形式是什么?

fyi 在郵件里是什么意思僅供參考:供您參考 (FYI: For Your Information) FYI is an acronym of "For Your Information". It is a widespread internet slang used these days in text messaging, instant messaging, and chatting on Facebook, WhatsApp…

Hyper-V 替換 vmwp

要激活 Hyper-V 下的虛機 最簡單的方法是用帶證書的vmwp替換掉原來的 帶證書的vmwp參見:http://bbs.pcbeta.com/viewthread-1408240-1-1.html 下載后腰替換 先把 Hyper-V 的倆服務停止掉 然后找到 C:\Windows\System32\vmwp.exe 右鍵--安全 替換掉所有者 然后給自己…

《MySQL——主備切換流程與主備延遲》

目錄主備切換主備延遲的原因可靠性優先策略的主備切換流程可用性優先策略的主備切換流程主備切換 主備切換分為主動運維與被動操作。 軟件升級、主庫所在機器按計劃下線為主動運維。 主庫所在機器掉電為被動操作。 同步延遲 1、主庫A執行完一個事務,寫入binlog…

ejb模式_EJB的完整形式是什么?

ejb模式EJB:企業Java Bean (EJB: Enterprise Java Bean) EJB is an abbreviation of Enterprise Java Bean. EJB is one of many Java application programming interfaces (API) for flexible and manageable structuring of Java Platform, Enterprise Edition (J…

Android之PreferenceActivity

http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html 看到很多書中都沒有對PreferenceActivity做介紹,而我正好又在項目中用到,所以就把自己的使用的在這總結一下,也方便日后查找。 PerferenceActivity是什么,看下…

淺談算法和數據結構: 七 二叉查找樹

前文介紹了符號表的兩種實現,無序鏈表和有序數組,無序鏈表在插入的時候具有較高的靈活性,而有序數組在查找時具有較高的效率,本文介紹的二叉查找樹(Binary Search Tree,BST)這一數據結構綜合了以上兩種數據結構的優點。…

scala部分應用函數_Scala中的部分函數

scala部分應用函數Scala部分功能 (Scala partial functions) A partial function is a function that returns values only for a specific set of values i.e. this function is not able to return values for some input values. This function is defined so that only som…

《MySQL——備庫多線程復制策略。》

目錄備庫并行復制能力MySQL5.6版本 并行復制策略MariaDB 并行復制策略MySQL5.7版本 并行復制策略MySQL5.7.22版本 并行復制策略總結備庫并行復制能力 主要涉及兩個方面的并行度: 1、客戶端寫入主庫的能力 2、備庫上sql_thread執行中轉日志relay log 1的并行能力…

人臉是門大生意

我們正處在一個新時代的入口。人有70%的能量是被大腦消耗,大腦90%的能量用來處理視覺信息,人臉則承載了絕大部分的視覺信息。我們要討論的是一個比Google Glass更酷的世界。文/程苓峰-云科技網易郵箱的用戶已經可以用人臉而不是密碼來驗證登陸。安卓4.0實…

【SQL】sql版Split函數。用于拆分字符串為單列表格

【SQL】sql版Split函數。用于拆分字符串為單列表格 功能與.net版string.Split函數類似,只不過.net返回的是數組,這個返回的是一個單列表格,每個拆分出來的子串占一行。可選是否移除空格子串和重復項。市面上類似的函數不算少,但大…

線描算法

線描算法 (Line drawing algorithms) The equation for a straight line is ymxb 直線方程為y mx b In this m represent a slope of a line which can be calculated by the my2-y1/x2-x1 where (x1, y1) are the starting position of the points and (x2, y2) are the end…

為移動端網頁構造快速響應按鈕

背景 在谷歌,我們不斷地推測手機網頁應用的可能性。像HTML5這樣的技術使我們網頁版的應用以及運行在手機設備上的原生應用。而這些技術的成就之一就是我們開發了一種新的創建按鈕的方法,使按鈕的響應時間遠遠快于一般的HTML按鈕。在此之前的按鈕或者其他…

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 數據庫比較工具 完全破解+使用教程

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 數據庫比較工具 完全破解使用教程 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 數據庫比較工具 完全破解使用教程 Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 數據庫版本控制…

《MySQL——基于位點orGTID的主備切換協議》

一主多從的設置,用于讀寫分離,主庫負責所有的寫入和一部分讀,其他讀請求則由從庫分擔。 一主多從架構下,主庫故障后的主備切換問題。相比于一主一備,多了從庫指向新主庫的過程。 基于位點的主備切換同步 把節點B設…

數據科學和統計學_數據科學中的統計

數據科學和統計學統計 (Statistics) Statistics are utilized to process complex issues in reality with the goal that Data Scientists and Analysts can search for important patterns and changes in Data. In straightforward words, Statistics can be utilized to ge…

java隨機數生成(固定位數)

隨機生成 a 到 b (不包含b)的整數:(int)(Math.random()*(b-a))a; 隨機生成 a 到 b (包含b)的整數:(int)(Math.random()*(b-a1))a;轉載于:https://www.cnblogs.com/zhwl/p/3624726.html

POJ 3670 Eating Together

POJ_3670 由于遞增和遞減是類似的,下面不妨只討論變成遞增序列的情況。 由于Di只有三個數,所以可以考慮將序列分割成三部分,第一部分全部變成1,第二部分全部變成2,第三部分全部變成3。然后我們枚舉3開始的位置&#xf…

《MySQL——如何解決一主多從的讀寫分離的過期讀問題》

目錄兩種架構兩種架構特點強制走主庫方案Sleep方案判斷主備無延遲方案配合semi-sync等主庫位點方案GTID方案兩種架構 基于一主多從的讀寫分離,如何處理主備延遲導致的讀寫分離問題。 讀寫分離的主要目標:分攤主庫壓力。 有兩種架構: 1、客…

json/ 發送形式_24/7的完整形式是什么?

json/ 發送形式24/7:二十四 (24/7: Twenty-Four Seven) 24/7 or 24-7 service, which generally marked "twenty-four seven" is service that is existing at any time and typically, every day in trade business and industry. Substitute orthograph…