更新時(shí)間:2022-08-31 10:17:44 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1580次
MySQL主從復(fù)制的原理是相當(dāng)基礎(chǔ)的知識(shí)。
MySQL主從復(fù)制是一個(gè)異步復(fù)制過(guò)程(但總體感覺是實(shí)時(shí)同步的)。
數(shù)據(jù)庫(kù)數(shù)據(jù)從一個(gè) MySQL 數(shù)據(jù)庫(kù)(我們稱之為 Master)復(fù)制到另一個(gè) MySQL 數(shù)據(jù)庫(kù)(我們稱之為 Slave)。
Master和Slave之間主從復(fù)制的整個(gè)過(guò)程是由三個(gè)線程完成的。
lave 端有兩個(gè)線程(SQL 線程和 IO 線程),Master 端有另一個(gè)線程(IO 線程)。(來(lái)自 MySQL 幫助文檔)
在Slave服務(wù)器上執(zhí)行start slave,開啟主從復(fù)制開關(guān)。
此時(shí),Slave 服務(wù)器上的 IO 線程通過(guò) Master 服務(wù)器上授權(quán)復(fù)制用戶的請(qǐng)求連接到 Master 服務(wù)器。
它還請(qǐng)求從 binlog 日志文件的指定位置發(fā)送 binlog 日志內(nèi)容。
(配置主從復(fù)制任務(wù)時(shí)執(zhí)行change master命令時(shí)指定日志文件名和位置)
Master服務(wù)器收到Slave服務(wù)器IO線程的請(qǐng)求后,Master服務(wù)器上的IO線程是基于Slave的。
服務(wù)器的IO線程請(qǐng)求的信息在指定binlog日志文件的指定位置后讀取binlog日志信息,然后返回給Slave端
IO線程。除了binlog日志內(nèi)容,在日志內(nèi)容返回后Master服務(wù)器端還有一個(gè)新的binlog。
binlog 中的文件名和下一個(gè)指定的更新位置。
當(dāng) Slave 服務(wù)器的 IO 線程從 Master 服務(wù)器獲取 IO 線程發(fā)送的日志內(nèi)容、日志文件和位置點(diǎn)時(shí),添加 binlog。
日志內(nèi)容依次寫入Slave端自身的relay log文件(mysql -relay-bin.xxxxxx)的末尾。
并將新的binlog文件名和位置記錄到master-info文件中,以便下次讀取Master端新的binlog日志日志時(shí),
可以告訴Master服務(wù)器從新的binlog日志中從哪個(gè)文件以及從哪里開始請(qǐng)求新的binlog日志內(nèi)容.
Slave server端的SQL線程實(shí)時(shí)檢測(cè)本地relay log中新增的日志內(nèi)容,及時(shí)relay log。
該文件的內(nèi)容被解析成在Master端執(zhí)行的SQL語(yǔ)句的內(nèi)容,在Slave服務(wù)器本身按照語(yǔ)句的順序執(zhí)行SQL的應(yīng)用。
聲明,申請(qǐng)后清理日志。
經(jīng)過(guò)上述過(guò)程,可以保證在Master和Slave端執(zhí)行相同的SQL語(yǔ)句。當(dāng)復(fù)制狀態(tài)正常時(shí),Master端和lave端的數(shù)據(jù)是完全一致的。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743