什么是主從復(fù)制呢凌受?(詳細(xì)版)

1.MySQL主從復(fù)制入門

首先,我們看一個(gè)圖:


MySQL 主從復(fù)制與讀寫分離概念及架構(gòu)分析

影響MySQL-A數(shù)據(jù)庫(kù)的操作思杯,在數(shù)據(jù)庫(kù)執(zhí)行后胜蛉,都會(huì)寫入本地的日志系統(tǒng)A中。

  • 假設(shè)智蝠,實(shí)時(shí)的將變化了的日志系統(tǒng)中的數(shù)據(jù)庫(kù)事件操作腾么,在MYSQL-A的3306端口奈梳,通過(guò)網(wǎng)絡(luò)發(fā)給MYSQL-B杈湾。
  • MYSQL-B收到后,寫入本地日志系統(tǒng)B攘须,然后一條條的將數(shù)據(jù)庫(kù)事件在數(shù)據(jù)庫(kù)中完成漆撞。
    那么,MYSQL-A的變化于宙,MYSQL-B也會(huì)變化浮驳,這樣就是所謂的MYSQL的復(fù)制,即MYSQL replication捞魁。

在上面的模型中至会,MYSQL-A就是主服務(wù)器,即master谱俭,MYSQL-B就是從服務(wù)器奉件,即slave宵蛀。
日志系統(tǒng)A,其實(shí)它是MYSQL的日志類型中的二進(jìn)制日志县貌,也就是專門用來(lái)保存修改數(shù)據(jù)庫(kù)表的所有動(dòng)作术陶,即bin log∶汉郏【注意MYSQL會(huì)在執(zhí)行語(yǔ)句之后梧宫,釋放鎖之前,寫入二進(jìn)制日志摆碉,確保事務(wù)安全】
日志系統(tǒng)B塘匣,并不是二進(jìn)制日志,由于它是從MYSQL-A的二進(jìn)制日志復(fù)制過(guò)來(lái)的巷帝,并不是自己的數(shù)據(jù)庫(kù)變化產(chǎn)生的馆铁,有點(diǎn)接力的感覺,稱為中繼日志锅睛,即relay log埠巨。

可以發(fā)現(xiàn),通過(guò)上面的機(jī)制现拒,可以保證MYSQL-A和MYSQL-B的數(shù)據(jù)庫(kù)數(shù)據(jù)一致辣垒,但是時(shí)間上肯定有延遲,即MYSQL-B的數(shù)據(jù)是滯后的印蔬。

【即便不考慮什么網(wǎng)絡(luò)的因素勋桶,MYSQL-A的數(shù)據(jù)庫(kù)操作是可以并發(fā)的執(zhí)行的,但是MYSQL-B只能從relay log中讀一條侥猬,執(zhí)行下例驹。因此MYSQL-A的寫操作很頻繁,MYSQL-B很可能跟不上退唠【樾猓】


2.主從復(fù)制的幾種方式

同步復(fù)制

所謂的同步復(fù)制,意思是master的變化瞧预,必須等待slave-1,slave-2,...,slave-n完成后才能返回屎债。
這樣,顯然不可取垢油,也不是MYSQL復(fù)制的默認(rèn)設(shè)置盆驹。比如,在WEB前端頁(yè)面上滩愁,用戶增加了條記錄躯喇,需要等待很長(zhǎng)時(shí)間。

異步復(fù)制

如同AJAX請(qǐng)求一樣硝枉。master只需要完成自己的數(shù)據(jù)庫(kù)操作即可廉丽。至于slaves是否收到二進(jìn)制日志秸讹,是否完成操作,不用關(guān)心雅倒。MYSQL的默認(rèn)設(shè)置璃诀。

半同步復(fù)制

master只保證slaves中的一個(gè)操作成功,就返回蔑匣,其他slave不管劣欢。
這個(gè)功能,是由google為MYSQL引入的裁良。


3.主從復(fù)制分析

  • 問題1:master的寫操作凿将,slaves被動(dòng)的進(jìn)行一樣的操作,保持?jǐn)?shù)據(jù)一致性价脾,那么slave是否可以主動(dòng)的進(jìn)行寫操作牧抵?

    假設(shè)slave可以主動(dòng)的進(jìn)行寫操作,slave又無(wú)法通知master侨把,這樣就導(dǎo)致了master和slave數(shù)據(jù)不一致了犀变。因此slave不應(yīng)該進(jìn)行寫操作,至少是slave上涉及到復(fù)制的數(shù)據(jù)庫(kù)不可以寫秋柄。實(shí)際上获枝,這里已經(jīng)揭示了讀寫分離的概念。

  • 問題2:主從復(fù)制中骇笔,可以有N個(gè)slave,可是這些slave又不能進(jìn)行寫操作省店,要他們干嘛?

    可以實(shí)現(xiàn)數(shù)據(jù)備份笨触。
    類似于高可用的功能懦傍,一旦master掛了,可以讓slave頂上去芦劣,同時(shí)slave提升為master粗俱。
    異地容災(zāi),比如master在北京持寄,地震掛了源梭,那么在上海的slave還可以繼續(xù)娱俺。
    主要用于實(shí)現(xiàn)scale out,分擔(dān)負(fù)載,可以將讀的任務(wù)分散到slaves上稍味。

    【很可能的情況是,一個(gè)系統(tǒng)的讀操作遠(yuǎn)遠(yuǎn)多于寫操作荠卷,因此寫操作發(fā)向master模庐,讀操作發(fā)向slaves進(jìn)行操作】

  • 問題3:主從復(fù)制中有master,slave1,slave2,...等等這么多MYSQL數(shù)據(jù)庫(kù),那比如一個(gè)JAVA WEB應(yīng)用到底應(yīng)該連接哪個(gè)數(shù)據(jù)庫(kù)?

    當(dāng)然油宜,我們?cè)趹?yīng)用程序中可以這樣掂碱,insert/delete/update這些更新數(shù)據(jù)庫(kù)的操作怜姿,用connection(for master)進(jìn)行操作,select用connection(for slaves)進(jìn)行操作疼燥。那我們的應(yīng)用程序還要完成怎么從slaves選擇一個(gè)來(lái)執(zhí)行select沧卢,例如簡(jiǎn)單的輪循算法。

    這樣的話醉者,相當(dāng)于應(yīng)用程序完成了SQL語(yǔ)句的路由但狭,而且與MYSQL的主從復(fù)制架構(gòu)非常關(guān)聯(lián),一旦master掛了撬即,某些slave掛了立磁,那么應(yīng)用程序就要修改了。能不能讓應(yīng)用程序與MYSQL的主從復(fù)制架構(gòu)沒有什么太多關(guān)系呢剥槐?可以看下面的圖:


找一個(gè)組件唱歧,application program只需要與它打交道,用它來(lái)完成MYSQL的代理粒竖,實(shí)現(xiàn)SQL語(yǔ)句的路由颅崩。
mysql proxy并不負(fù)責(zé),怎么從眾多的slaves挑一個(gè)蕊苗?可以交給另一個(gè)組件(比如haproxy)來(lái)完成挨摸。
這就是所謂的MYSQL READ WRITE SPLITE,MYSQL的讀寫分離岁歉。

  • 問題4:如果mysql proxy , direct , master他們中的某些掛了怎么辦得运?

    總統(tǒng)一般都會(huì)弄個(gè)副總統(tǒng),以防不測(cè)锅移。同樣的熔掺,可以給這些關(guān)鍵的節(jié)點(diǎn)來(lái)個(gè)備份。

  • 問題5:當(dāng)master的二進(jìn)制日志每產(chǎn)生一個(gè)事件非剃,都需要發(fā)往slave置逻,如果我們有N個(gè)slave,那是發(fā)N次,還是只發(fā)一次备绽?

    如果只發(fā)一次券坞,發(fā)給了slave-1,那slave-2,slave-3,...它們?cè)趺崔k肺素?

    顯 然恨锚,應(yīng)該發(fā)N次。實(shí)際上倍靡,在MYSQL master內(nèi)部猴伶,維護(hù)N個(gè)線程,每一個(gè)線程負(fù)責(zé)將二進(jìn)制日志文件發(fā)往對(duì)應(yīng)的slave。master既要負(fù)責(zé)寫操作他挎,還的維護(hù)N個(gè)線程筝尾,負(fù)擔(dān)會(huì)很重“旖埃可 以這樣筹淫,slave-1是master的從,slave-1又是slave-2,slave-3,...的主呢撞,同時(shí)slave-1不再負(fù)責(zé)select贸街。 slave-1將master的復(fù)制線程的負(fù)擔(dān),轉(zhuǎn)移到自己的身上狸相。這就是所謂的多級(jí)復(fù)制的概念薛匪。

  • 問題6:當(dāng)一個(gè)select發(fā)往mysql proxy,可能這次由slave-2響應(yīng)脓鹃,下次由slave-3響應(yīng)逸尖,這樣的話,就無(wú)法利用查詢緩存了瘸右。

    應(yīng)該找一個(gè)共享式的緩存娇跟,比如memcache來(lái)解決。將slave-2,slave-3,...這些查詢的結(jié)果都緩存至mamcache中太颤。

  • 問題7:隨著應(yīng)用的日益增長(zhǎng)苞俘,讀操作很多,我們可以擴(kuò)展slave龄章,但是如果master滿足不了寫操作了吃谣,怎么辦呢?

    scale on ?更好的服務(wù)器做裙? 沒有最好的岗憋,只有更好的,太貴了锚贱。仔戈。。

    scale out ? 主從復(fù)制架構(gòu)已經(jīng)滿足不了拧廊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末监徘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吧碾,更是在濱河造成了極大的恐慌凰盔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤港,死亡現(xiàn)場(chǎng)離奇詭異廊蜒,居然都是意外死亡趴拧,警方通過(guò)查閱死者的電腦和手機(jī)溅漾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門山叮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人添履,你說(shuō)我怎么就攤上這事屁倔。” “怎么了暮胧?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵锐借,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我往衷,道長(zhǎng)钞翔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任席舍,我火速辦了婚禮布轿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘来颤。我一直安慰自己汰扭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布福铅。 她就那樣靜靜地躺著萝毛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滑黔。 梳的紋絲不亂的頭發(fā)上笆包,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音略荡,去河邊找鬼色查。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撞芍,可吹牛的內(nèi)容都是我干的秧了。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼序无,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼验毡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起帝嗡,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晶通,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哟玷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狮辽,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡一也,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喉脖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椰苟。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖树叽,靈堂內(nèi)的尸體忽然破棺而出舆蝴,到底是詐尸還是另有隱情,我是刑警寧澤题诵,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布洁仗,位于F島的核電站,受9級(jí)特大地震影響性锭,放射性物質(zhì)發(fā)生泄漏赠潦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一草冈、第九天 我趴在偏房一處隱蔽的房頂上張望她奥。 院中可真熱鬧,春花似錦疲陕、人聲如沸方淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)携茂。三九已至,卻和暖如春诅岩,著一層夾襖步出監(jiān)牢的瞬間讳苦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工吩谦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸳谜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓式廷,卻偏偏與公主長(zhǎng)得像咐扭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滑废,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容