真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql主從復(fù)制原理是什么

mysql主從復(fù)制原理:首先主庫(kù)發(fā)送更新事件到從庫(kù);然后從庫(kù)讀取更新記錄,并執(zhí)行更新記錄;最后使得從庫(kù)的內(nèi)容與主庫(kù)保持一致。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括博野網(wǎng)站建設(shè)、博野網(wǎng)站制作、博野網(wǎng)頁(yè)制作以及博野網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,博野網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到博野省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

相關(guān)免費(fèi)學(xué)習(xí)推薦:mysql視頻教程

mysql主從復(fù)制原理:

為什么要做主從復(fù)制

在業(yè)務(wù)復(fù)雜的系統(tǒng)中,有這么一個(gè)情景,有一句sql語(yǔ)句需要鎖表,導(dǎo)致暫時(shí)不能使用讀的服務(wù),那么就很影響運(yùn)行中的業(yè)務(wù),使用主從復(fù)制,讓主庫(kù)負(fù)責(zé)寫,從庫(kù)負(fù)責(zé)讀,這樣,即使主庫(kù)出現(xiàn)了鎖表的情景,通過讀從庫(kù)也可以保證業(yè)務(wù)的正常運(yùn)行。

做數(shù)據(jù)的熱備,主庫(kù)宕機(jī)后能夠及時(shí)替換主庫(kù),保證業(yè)務(wù)可用性。

架構(gòu)的擴(kuò)展。業(yè)務(wù)量越來(lái)越大,I/O訪問頻率過高,單機(jī)無(wú)法滿足,此時(shí)做多庫(kù)的存儲(chǔ),降低磁盤I/O訪問的頻率,提高單個(gè)機(jī)器的I/O性能。

MySQL主從復(fù)制的流程

主庫(kù)db的更新事件(update、insert、delete)被寫到binlog

主庫(kù)創(chuàng)建一個(gè)binlog dump thread,把binlog的內(nèi)容發(fā)送到從庫(kù)

從庫(kù)啟動(dòng)并發(fā)起連接,連接到主庫(kù)

從庫(kù)啟動(dòng)之后,創(chuàng)建一個(gè)I/O線程,讀取主庫(kù)傳過來(lái)的binlog內(nèi)容并寫入到relay log

從庫(kù)啟動(dòng)之后,創(chuàng)建一個(gè)SQL線程,從relay log里面讀取內(nèi)容,從Exec_Master_Log_Pos位置開始執(zhí)行讀取到的更新事件,將更新內(nèi)容寫入到slave的db

注:上述流程為相對(duì)流程,并非絕對(duì)流程

MySQL主從復(fù)制的原理

MySQL主從復(fù)制是一個(gè)異步的復(fù)制過程,主庫(kù)發(fā)送更新事件到從庫(kù),從庫(kù)讀取更新記錄,并執(zhí)行更新記錄,使得從庫(kù)的內(nèi)容與主庫(kù)保持一致。

binlog:binary log,主庫(kù)中保存所有更新事件日志的二進(jìn)制文件。binlog是數(shù)據(jù)庫(kù)服務(wù)啟動(dòng)的一刻起,保存數(shù)據(jù)庫(kù)所有變更記錄(數(shù)據(jù)庫(kù)結(jié)構(gòu)和內(nèi)容)的文件。在主庫(kù)中,只要有更新事件出現(xiàn),就會(huì)被依次地寫入到binlog中,之后會(huì)推送到從庫(kù)中作為從庫(kù)進(jìn)行復(fù)制的數(shù)據(jù)源。

binlog輸出線程:每當(dāng)有從庫(kù)連接到主庫(kù)的時(shí)候,主庫(kù)都會(huì)創(chuàng)建一個(gè)線程然后發(fā)送binlog內(nèi)容到從庫(kù)。 對(duì)于每一個(gè)即將發(fā)送給從庫(kù)的sql事件,binlog輸出線程會(huì)將其鎖住。一旦該事件被線程讀取完之后,該鎖會(huì)被釋放,即使在該事件完全發(fā)送到從庫(kù)的時(shí)候,該鎖也會(huì)被釋放。

在從庫(kù)中,當(dāng)復(fù)制開始時(shí),從庫(kù)就會(huì)創(chuàng)建從庫(kù)I/O線程和從庫(kù)的SQL線程進(jìn)行復(fù)制處理。

從庫(kù)I/O線程:當(dāng)START SLAVE語(yǔ)句在從庫(kù)開始執(zhí)行之后,從庫(kù)創(chuàng)建一個(gè)I/O線程,該線程連接到主庫(kù)并請(qǐng)求主庫(kù)發(fā)送binlog里面的更新記錄到從庫(kù)上。 從庫(kù)I/O線程讀取主庫(kù)的binlog輸出線程發(fā)送的更新并拷貝這些更新到本地文件,其中包括relay log文件。

從庫(kù)的SQL線程:從庫(kù)創(chuàng)建一個(gè)SQL線程,這個(gè)線程讀取從庫(kù)I/O線程寫到relay log的更新事件并執(zhí)行。

綜上所述,可知:

對(duì)于每一個(gè)主從復(fù)制的連接,都有三個(gè)線程。擁有多個(gè)從庫(kù)的主庫(kù)為每一個(gè)連接到主庫(kù)的從庫(kù)創(chuàng)建一個(gè)binlog輸出線程,每一個(gè)從庫(kù)都有它自己的I/O線程和SQL線程。

從庫(kù)通過創(chuàng)建兩個(gè)獨(dú)立的線程,使得在進(jìn)行復(fù)制時(shí),從庫(kù)的讀和寫進(jìn)行了分離。因此,即使負(fù)責(zé)執(zhí)行的線程運(yùn)行較慢,負(fù)責(zé)讀取更新語(yǔ)句的線程并不會(huì)因此變得緩慢。比如說,如果從庫(kù)有一段時(shí)間沒運(yùn)行了,當(dāng)它在此啟動(dòng)的時(shí)候,盡管它的SQL線程執(zhí)行比較慢,它的I/O線程可以快速地從主庫(kù)里讀取所有的binlog內(nèi)容。這樣一來(lái),即使從庫(kù)在SQL線程執(zhí)行完所有讀取到的語(yǔ)句前停止運(yùn)行了,I/O線程也至少完全讀取了所有的內(nèi)容,并將其安全地備份在從庫(kù)本地的relay log,隨時(shí)準(zhǔn)備在從庫(kù)下一次啟動(dòng)的時(shí)候執(zhí)行語(yǔ)句。
本文題目:mysql主從復(fù)制原理是什么
文章起源:http://weahome.cn/article/cjedci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部