MySQL主從延遲現象及原理分析詳解

2022-09-25 09:21:07 字數 1878 閱讀 2983

一、現象

凌晨對線上一張表新增索引,表資料量太大(1億+資料,資料量50g以上),造成主從延遲幾個小時,各個依賴從庫的系統無法查詢資料,最終影響業務。

現在就梳理下主從延遲的原理。

二、原理

根據 mysql 官方文件 mysql replication implementation details 中的描述,mysql 主從複製依賴於三個執行緒:master乙個執行緒(binlog dump thread),sl**e兩個執行緒(i/o thread和sql thread)。主從複製流程如下圖:

master 伺服器和 sl**e 伺服器連線時,建立binlog dum程式設計客棧p thread以傳送bin log資料:

當 sl**e 伺服器收到 start_sl**e 命令時,會建立i/o thread和sql thread:

注:start_sl**e命令成功啟動執行緒後,如果後面i/o thread或sql thread因為某些原因停止,則不會有任何的警告,業務方無法感www.cppcns.com知。可以通過檢視 sl**e 的 error 日誌,或者通過 show sl**e status 檢視 sl**e 上的執行緒狀態。

通過 show processlist 可檢視執行緒狀態:

binlog dump thread:

mysql> show processlist\g

*************************** 1. row ***************************

id: 2

user: root

host: localhost:32931

db: null

command: binlog dump

time: 94

state: has sent all binlog to sl**e; waiting for binlog to

be updated

info: null

i/o thread 和 sql thread:

mysql> show processlist\g

*************************** 1. row ***************************

id: 10

user: system user

host:

db: null

command: connect

time: 11

state: waiting for master to send event

info: null

*************************** 2. row ***************************

id: 11

user: system user

host:

db: null

command: connect

time: 11

state: has read all relay log; waiting for the sl**e i/o

thread to update it

info: null

三、分析

根據上面的原理,由於sl**e是單執行緒(i/o thread)讀取資料,單執行緒(sql thread)更新資料,而master是多執行緒寫入,那麼只要master寫入的頻率大於sl**e讀取更新的頻率,就有可能出現主從延遲的情況,如:

此處建立了索引,諮詢 dba,產生的bin log檔案有100多g,資料量jubruoqfqv太大,導致從庫i/o thread一直讀取ddl操作產生的bin log事件,而影響到正常的業務dml事件的更新,從而表現為主從同步延遲。

四、解決方案

從主從延遲的原因來看,解決方案可以從以下幾個方向入手:

總結

MySQL主從延遲分析

主從常見架構 一主多從 級聯複製 多主一從,主主複製。主從複製原理 對於主從來說,通常的操作是主庫用來寫入資料,從庫用來讀取資料。這樣的好處是通過將讀寫壓力分散開,避免了所有的請求都打在主庫上。同時通過從庫進行水平擴充套件使系統的伸縮性及負載能力也得到了很大的提公升。但是問題就來了,讀從庫時的資料要...

mysql主從原理及配置

一 mysql集群架構 1 一主一從 2 雙主 3 一主多從 擴充套件mysql的讀效能 4 多主一從 5.7開始支援 5 聯機複製 關係圖 二 配置主從用途及條件 2.1用途 1 保障可用性,故障切換。2 提高效能,讀寫分離,讀在從庫。3 容災備份。2.2條件 1 主庫開啟bin log,並正確配...

mysql主從同步延遲問題

mysql配置讀寫分離後,master負責所有的寫操作,而從伺服器負責一切的讀操作。其實在資料庫中使用的最多的操作就是讀操作,一般而言,資料庫會有較大可能成為整個系統的瓶頸。導致資料庫主從同步延遲較大的問題一般有以下幾種。1 從伺服器配置較低,只需要公升級從伺服器的配置即可 2 主庫的qps過高導致...