MySQL復(fù)制介紹
MySQL復(fù)制允許將主實(shí)例(master)上的數(shù)據(jù)同步到一個(gè)或多個(gè)從實(shí)例(slave)上,默認(rèn)情況下復(fù)制是異步進(jìn)行的,從庫(kù)也不需要一直連接到主庫(kù)來同步數(shù)據(jù)。
MySQL復(fù)制的數(shù)據(jù)粒度可以是主實(shí)例上所有的數(shù)據(jù)庫(kù),也可以是指定的一個(gè)或多個(gè)數(shù)據(jù)庫(kù),也可以是一個(gè)數(shù)據(jù)庫(kù)里的指定的表。


MySQL復(fù)制所帶來的優(yōu)勢(shì)在于:
拓展能力:?通過復(fù)制功能可以將MySQL的性能壓力分擔(dān)到一個(gè)或多個(gè)slave上。這要求所有的寫操作和修改操作都必須在Master上完成,而讀操作可以被分配到一個(gè)或多個(gè)slave上。將讀寫分離到不同服務(wù)器執(zhí)行之后,MySQL的讀寫性能得到提升。
數(shù)據(jù)庫(kù)備份:由于從實(shí)例是同步主實(shí)例的數(shù)據(jù),所以可以將備份作業(yè)部署到從庫(kù)。
數(shù)據(jù)分析和報(bào)表:同樣,一些數(shù)據(jù)分析和報(bào)表的實(shí)現(xiàn)可以在從實(shí)例執(zhí)行,以減少對(duì)主庫(kù)的性能影響。
容災(zāi)能力:可以在物理距離較遠(yuǎn)的另一個(gè)數(shù)據(jù)中心建立一個(gè)slave,保證在主實(shí)例所在地區(qū)遭遇災(zāi)難時(shí),在另一個(gè)數(shù)據(jù)中心能快速恢復(fù)。
MySQL復(fù)制有兩種方法:
傳統(tǒng)方式:基于主庫(kù)的bin-log將日志事件和事件位置復(fù)制到從庫(kù),從庫(kù)再加以應(yīng)用來達(dá)到主從同步的目的
GTID方式:global transaction identifiers是基于事務(wù)來復(fù)制數(shù)據(jù),因此也就不依賴日志文件,同時(shí)又能更好的保證主從庫(kù)數(shù)據(jù)一致性
MySQL復(fù)制有多種類型:
異步復(fù)制:一個(gè)主庫(kù),一個(gè)或多個(gè)從庫(kù),數(shù)據(jù)異步同步到從庫(kù)
同步復(fù)制:在MySQL Cluster中特有的復(fù)制方式
半同步復(fù)制:在異步復(fù)制的基礎(chǔ)上,確保任何一個(gè)主庫(kù)上的事務(wù)在提交之前至少有一個(gè)從庫(kù)已經(jīng)收到該事務(wù)并日志記錄下來
延遲復(fù)制:在異步復(fù)制的基礎(chǔ)上,人為設(shè)定主庫(kù)和從庫(kù)的數(shù)據(jù)同步延遲時(shí)間,即保證數(shù)據(jù)延遲至少是這個(gè)參數(shù)


復(fù)制的工作原理是數(shù)據(jù)庫(kù)修改事件記錄到bin log中并傳遞到slave,然后slave在本地還原的過程。而事件記錄到bin log的格式會(huì)有所不同。
MySQL復(fù)制有三種核心格式:
基于語(yǔ)句的復(fù)制(statement based replication):基于主庫(kù)將SQL語(yǔ)句寫入到 bin log中完成復(fù)制
基于行數(shù)據(jù)的復(fù)制(row based replication):基于主庫(kù)將每一個(gè)行數(shù)據(jù)變化的信息作為事件寫入到bin log中完成日志
混合復(fù)制(mixed based replication):上述兩者的結(jié)合。默認(rèn)情況下優(yōu)先使用基于語(yǔ)句的復(fù)制,只有當(dāng)部分語(yǔ)句如果基于語(yǔ)句復(fù)制不安全的情況下才會(huì)自動(dòng)切換為基于行數(shù)據(jù)的復(fù)制

參考
MySQL 5.7 主從復(fù)制
https://www.cnblogs.com/backz/p/15426071.html