轉(zhuǎn)發(fā):https://www.cnblogs.com/nulige/p/6034301.html
前言
MySQL的主從復(fù)制是MySQL本身自帶的一個(gè)功能橡伞,不需要額外的第三方軟件就可以實(shí)現(xiàn)掺冠,其復(fù)制功能并不是copy文件來實(shí)現(xiàn)的理盆,而是借助binlog日志文件里面的SQL命令實(shí)現(xiàn)的主從復(fù)制蓝谨,可以理解為我再M(fèi)aster端執(zhí)行了一條SQL命令垛玻,那么在Salve端同樣會(huì)執(zhí)行一遍摹察,從而達(dá)到主從復(fù)制的效果冤留。
MySQL主從復(fù)制架構(gòu)圖
一主一從
master-slave-replication-01
一主多從
master-slave-replication-02
級聯(lián)
master-slave-replication-03
雙主一從
master-slave-replication-04
互為主從
master-slave-replication-05
環(huán)狀
master-slave-replication-06
主從復(fù)制原理
MySQL的主從復(fù)制是一個(gè)異步的復(fù)制過程碧囊,數(shù)據(jù)庫從一個(gè)Master復(fù)制到Slave數(shù)據(jù)庫,在Master與Slave之間實(shí)現(xiàn)整個(gè)主從復(fù)制的過程是由三個(gè)線程參與完成的纤怒,其中有兩個(gè)線程(SQL線程和IO線程)在Slave端糯而,另一個(gè)線程(IO線程)在Master端。
主從復(fù)制流程圖
?流程說明:
MySQL主從復(fù)制之前我們需要先啟動(dòng)Master數(shù)據(jù)庫然后再啟動(dòng)Salve數(shù)據(jù)庫泊窘,然后在Salve數(shù)據(jù)庫中執(zhí)行start slave;熄驼,執(zhí)行完成之后像寒,流程就如下了:
Salve的IO線程會(huì)讀取mastr.info文件中配置好的主庫信息,比如說存放的有:Master數(shù)據(jù)庫的用戶名瓜贾、密碼萝映、端口、還有Master的binlog索引位置阐虚;
拿到信息之后就帶著信息去鏈接Master的主庫IO線程
當(dāng)主庫的IO線程先檢查SLave傳過來的配置信息是否正確序臂,如果正確,就拿著Slave傳過來的binlog索引位置和Master庫的binlog文件中最后一個(gè)索引位置進(jìn)行對比实束,如果一致就陷入等待狀態(tài)奥秆,等待Master的binlog索引位置更新;
如果不一致就把Slave傳過來的binlog索引位置往后的所有SQL語句包括最后一條SQL語句的索引位置發(fā)送個(gè)給Slave的IO線程咸灿;
Slave的IO線程拿到信息之后构订,先把Master傳過來的binlog索引在Slave的master.info文件中進(jìn)行更新;
然后再把Master傳過來的SQL語句寫入到relay文件中避矢,然后繼續(xù)循環(huán)執(zhí)行第二個(gè)步驟悼瘾;
Slave的SQL線程會(huì)一直持續(xù)的觀察relay日志文件中是否有改動(dòng),如果沒有就繼續(xù)監(jiān)聽审胸;
如果發(fā)現(xiàn)relay中有變動(dòng)亥宿,那么就獲取變動(dòng)的內(nèi)容轉(zhuǎn)換為SQL語句,并且把SQL語句在Salve的數(shù)據(jù)庫中進(jìn)行執(zhí)行