一、復(fù)制機(jī)制的實現(xiàn)原理
從高層來看,復(fù)制分成三步:
(1)????master
將改變記錄到二進(jìn)制日志
(binary?log)
中(這些記錄叫做二進(jìn)制日志事件,
binary?log?events
);
(2)????slave
將
master
的
binary?log?events
拷貝到它的中繼日志
(relay?log)
;
(3)????slave
重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。
?
二、復(fù)制實現(xiàn)級別
1.?Row
日志中會記錄成每一行數(shù)據(jù)被修改的形式,然后在?slave?端再對相同的數(shù)據(jù)進(jìn)行修改。
優(yōu)點:在?row?模式下,bin-log?中可以不記錄執(zhí)行的?SQL?語句的上下文相關(guān)的信息,僅僅只需要記錄哪一條記錄被修改了,修改成什么樣了。所以?row?的日志內(nèi)容會非常清楚的記錄下每一行數(shù)據(jù)修改的細(xì)節(jié),非常容易理解。而且不會出現(xiàn)某些特定情況下的存儲過程或?function?,以及?trigger?的調(diào)用和觸發(fā)無法被正確復(fù)制的問題。
缺點:在?row?模式下,所有的執(zhí)行的語句當(dāng)記錄到日志中的時候,都將以每行記錄的修改來記錄,這樣可能會產(chǎn)生大量的日志內(nèi)容
2.?Statement
每一條會修改數(shù)據(jù)的?SQL?都會記錄到?master?的?bin-log?中。slave?在復(fù)制的時候?SQL?進(jìn)程會解析成和原來?master?端執(zhí)行過的相同的?SQL?再次執(zhí)行。
優(yōu)點:在?statement?模式下,首先就是解決了?row?模式的缺點,不需要記錄每一行數(shù)據(jù)的變化,減少了?bin-log?日志量,節(jié)省?I/O?以及存儲資源,提高性能。因為他只需要記錄在?master?上所執(zhí)行的語句的細(xì)節(jié),以及執(zhí)行語句時候的上下文的信息。
缺點:在?statement?模式下,由于他是記錄的執(zhí)行語句,所以,為了讓這些語句在?slave?端也能正確執(zhí)行,那么他還必須記錄每條語句在執(zhí)行的時候的一些相關(guān)信息,也就是上下文信息,以保證所有語句在?slave?端杯執(zhí)行的時候能夠得到和在?master?端執(zhí)行時候相同的結(jié)果。復(fù)制容易問題
3.?mixed
在?Mixed?模式下,MySQL?會根據(jù)執(zhí)行的每一條具體的?SQL?語句來區(qū)分對待記錄的日志形式,也就是在?statement?和?row?之間選擇一種。新版本中的?statment?還是和以前一樣,僅僅記錄執(zhí)行的語句。而新版本的?MySQL?中對?row?模式也被做了優(yōu)化,并不是所有的修改都會以?row?模式來記錄,比如遇到表結(jié)構(gòu)變更的時候就會以?statement?模式來記錄,如果?SQL?語句確實就是?update?或者?delete?等修改數(shù)據(jù)的語句,那么還是會記錄所有行的變更。
三、復(fù)制常用架構(gòu)
1、單一
master
和多
slave
由一個
master
和一個
slave
組成復(fù)制系統(tǒng)是最簡單的情況。
Slave
之間并不相互通信,只能與
master
進(jìn)行通信。如下:
如果寫操作較少,而讀操作很時,可以采取這種結(jié)構(gòu)。你可以將讀操作分布到其它的
slave
,從而減小
master
的壓力。但是,當(dāng)
slave
增加到一定數(shù)量時,
slave
對
master
的負(fù)載以及網(wǎng)絡(luò)帶寬都會成為一個嚴(yán)重的問題。
這種結(jié)構(gòu)雖然簡單,但是,它卻非常靈活,足夠滿足大多數(shù)應(yīng)用需求。一些建議:
(1)????
不同的
slave
扮演不同的作用
(
例如使用不同的索引,或者不同的存儲引擎
)
;
(2)????
用一個
slave
作為備用
master
,只進(jìn)行復(fù)制;
(3)????
用一個遠(yuǎn)程的
slave
,用于災(zāi)難恢復(fù);
?
2、Dual?Master?(Master-Master)
Master-Master 復(fù)制的兩臺服務(wù)器,既是 master ,又是另一臺服務(wù)器的 slave
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
