溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL?Binlog日志與主從復(fù)制是什么

發(fā)布時(shí)間:2022-08-01 11:13:28 來源:億速云 閱讀:97 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了MySQL Binlog日志與主從復(fù)制是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇MySQL Binlog日志與主從復(fù)制是什么文章都會(huì)有所收獲,下面我們一起來看看吧。

1. Binlog日志的介紹

Binlog是Binary log的縮寫,即二進(jìn)制日志。Binlog主要有三個(gè)作用:持久化時(shí)將隨機(jī)IO轉(zhuǎn)化為順序IO,主從復(fù)制以及數(shù)據(jù)恢復(fù)。本文重點(diǎn)主從復(fù)制相關(guān)的問題。

Binlog日志由一個(gè)索引文件與很多日志文件組成,每個(gè)日志文件由魔數(shù)以及事件組成,每個(gè)日志文件都會(huì)以一個(gè)Rotate類型的事件結(jié)束。

MySQL?Binlog日志與主從復(fù)制是什么

對(duì)于每個(gè)事件,都可以分為事件頭與事件體兩部分:

事件頭的結(jié)構(gòu)如下所示:

MySQL?Binlog日志與主從復(fù)制是什么

事件體的結(jié)構(gòu)包括固定大小與可變大小兩部分。

對(duì)于Binlog日志的格式,做簡(jiǎn)單的了解即可,感興趣的同學(xué)可以深入學(xué)習(xí)。

2. 主從復(fù)制

2.1 主從復(fù)制的流程

MySQL?Binlog日志與主從復(fù)制是什么

MySQL主從復(fù)制的流程大致如下:

  • 主庫(kù)同步自己的Binlog日志給從庫(kù)

  • 從庫(kù)的IO線程將Binlog日志內(nèi)容寫入Relay Log

  • 從庫(kù)的SQL線程取Relay Log并在數(shù)據(jù)庫(kù)中進(jìn)行回放

2.2 GTID

GTID是指全局事務(wù)標(biāo)志,用來標(biāo)記主從同步的情況。

master提交一個(gè)事務(wù)時(shí)會(huì)產(chǎn)生GTID,并且記錄在Binlog日志中。從庫(kù)的IO線程在讀取Binlog日志時(shí),會(huì)將其儲(chǔ)存在自己的Relaylog中,并且將這個(gè)值設(shè)置到gtid_next中,即下一個(gè)要讀取的GTID,從庫(kù)讀取這個(gè)gtid_next時(shí),會(huì)對(duì)比自己的Binlog日志中是否有這個(gè)GTID:

  • 如果有這個(gè)記錄,說明這個(gè)GTID的事務(wù)已經(jīng)執(zhí)行過了,可以忽略掉(冪等)。

  • 如果沒有這個(gè)記錄,slave就會(huì)執(zhí)行該GTID事務(wù),并記錄到自己的Binlog日志中。

2.3 復(fù)制模型

  • 異步復(fù)制:master 把Binlog日志推送給slave,master不需要等到slave是否成功更新數(shù)據(jù)到Relay log,主庫(kù)直接提交事務(wù)即可。這種模式犧牲了數(shù)據(jù)一致性。

  • 同步復(fù)制:每次用戶操作時(shí),必須要保證Master和Slave都執(zhí)行成功才返回給用戶。

  • 半同步復(fù)制:不要求Slave執(zhí)行成功,而是成功接收Master日志就可以通知Master返回。

MySQL?Binlog日志與主從復(fù)制是什么

2.4 MGR模式

分布式一致性算法Paxos。由至少3個(gè)或更多個(gè)節(jié)點(diǎn)共同組成一個(gè)數(shù)據(jù)庫(kù)集群,事務(wù)的提交必須經(jīng)過半數(shù)以上節(jié)點(diǎn)同意方可提交提供,支持多寫模式。

MGR 是 share-nothing 的復(fù)制方案,基于分布式paxos協(xié)議實(shí)現(xiàn),每個(gè)實(shí)例都有獨(dú)立的完整數(shù)據(jù)副本,集群自動(dòng)檢查節(jié)點(diǎn)信息,做數(shù)據(jù)的同步。同時(shí)提供單主模式和多主模式,單主模式在主庫(kù)宕機(jī)后能夠自動(dòng)選主,所有寫入都在主節(jié)點(diǎn)進(jìn)行,多主模式支持多節(jié)點(diǎn)寫入。同時(shí)集群提供冗余的容錯(cuò)功能,保證集群大多數(shù)節(jié)點(diǎn)正常集群就可以正常提供服務(wù)。

2.5 并行回放

事務(wù)回放是從庫(kù)的SQL線程執(zhí)行Relay Log的過程,并行回放是為了提高這一過程的效率,將可以并行進(jìn)行的事務(wù)同時(shí)進(jìn)行。

  • 基于邏輯時(shí)鐘的并行回放

因?yàn)镸ySQL本身事務(wù)具有ACID的特點(diǎn),所以從主庫(kù)同步到從庫(kù)的事務(wù),只要其執(zhí)行的邏輯時(shí)間上有重疊,那么這兩個(gè)事務(wù)就能安全的進(jìn)行并行回放。

  • 基于writeSet的并行回放

使用一個(gè)HashMap保存一定時(shí)間內(nèi)針對(duì)某一塊數(shù)據(jù)區(qū)域的事務(wù)的集合。如果事務(wù)在同一組內(nèi)或者是邏輯時(shí)鐘有重疊,說明沒有沖突,其他情況不能確定是否有沖突。

關(guān)于“MySQL Binlog日志與主從復(fù)制是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“MySQL Binlog日志與主從復(fù)制是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI