溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

簡(jiǎn)單認(rèn)識(shí)mysql主從同步原理

發(fā)布時(shí)間:2020-05-08 11:27:21 來(lái)源:億速云 閱讀:228 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

下面跟著筆者一起來(lái)了解下簡(jiǎn)單認(rèn)識(shí)mysql主從同步原理,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望簡(jiǎn)單認(rèn)識(shí)mysql主從同步原理這篇短內(nèi)容是你想要的。

mysql主從復(fù)制介紹

    當(dāng)前的生產(chǎn)工作中,大多數(shù)應(yīng)用的mysql主從同步都是異步的復(fù)制方式,即不是嚴(yán)格實(shí)時(shí)的數(shù)據(jù)同步。

    實(shí)時(shí)和異步:

 

   同步復(fù)制: 指的是客戶端連接到MySQL主云服務(wù)器寫(xiě)入一段數(shù)據(jù), MySQL主云服務(wù)器同步給MySQL從云服務(wù)器需要等待從云服務(wù)器發(fā)出同步完成的響應(yīng)才返回客戶端OK, 這其中等待同步的過(guò)程是阻塞的, 如果有N臺(tái)從云服務(wù)器, 效率極低 

   異步復(fù)制: 指的是客戶端連接到MySQL主云服務(wù)器寫(xiě)入一段數(shù)據(jù), MySQL主云服務(wù)器將寫(xiě)入的數(shù)據(jù)發(fā)送給MySQL從云服務(wù)器, 然后直接返回客戶端OK, 可能從云服務(wù)器的數(shù)據(jù)會(huì)和主服務(wù)不一致 

   半同步復(fù)制:指的是客戶端連接到MySQL主云服務(wù)器寫(xiě)入一段數(shù)據(jù), MySQL主云服務(wù)器只將數(shù)據(jù)同步復(fù)制給其中一臺(tái)從云服務(wù)器, 半同步復(fù)制給其他的從云服務(wù)器, 來(lái)達(dá)到其中一臺(tái)從云服務(wù)器完全同步的效果


主從復(fù)制原理:

簡(jiǎn)單認(rèn)識(shí)mysql主從同步原理

從庫(kù)需要兩個(gè)線程完成,一個(gè)叫做I/O線程,一個(gè)叫做sql線程

主庫(kù)需要一個(gè)線程叫做I/O線程

主庫(kù)必須要開(kāi)啟binlog日志才能完成主從同步,當(dāng)用戶請(qǐng)求到主的庫(kù)里面,會(huì)將增刪改的東西記錄到binlog日志里面,主從復(fù)制是從庫(kù)去找主庫(kù)的,建立時(shí),我們?cè)趶膸?kù)上使用change master指定master的ip,端口,二進(jìn)制文件名稱(chēng),pos,master的密碼等信息。并在從庫(kù)上開(kāi)啟start  slave就會(huì)開(kāi)啟同步。

開(kāi)啟同步后,先是從向主發(fā)起請(qǐng)求。然后主庫(kù)進(jìn)行驗(yàn)證從庫(kù)是否正常,驗(yàn)證之后,主庫(kù)就會(huì)給從庫(kù)按照信息發(fā)送日志,從庫(kù)上存放日志的地方叫做中繼日志(relay log),其實(shí)從庫(kù)里面還有一個(gè)master info信息,這個(gè)里面記錄的是change master的信息,每一次取日志回來(lái)都會(huì)對(duì)從庫(kù)的master  info信息進(jìn)行更新,接下來(lái)從庫(kù)根據(jù)master  info的binlog信息去主庫(kù)在取跟新的binlog信息,

放到中繼日志里面,我們?nèi)绾芜M(jìn)行更新?

當(dāng)主將binlog發(fā)送過(guò)來(lái)放到中繼日志里面的時(shí)候,sql線程就會(huì)語(yǔ)句經(jīng)過(guò)轉(zhuǎn)換寫(xiě)到從庫(kù)里面。


注意

1.開(kāi)啟binlog日志

2.change master(在從庫(kù)上)

3.在從庫(kù)開(kāi)啟start slave之前。這兩個(gè)庫(kù)的數(shù)據(jù)必須是一樣的,所以講主庫(kù)的數(shù)據(jù)進(jìn)行備份使用master-data=1,會(huì)記錄位置的。然后從庫(kù)會(huì)指定從主庫(kù)備份里面找備份點(diǎn)。

4.要在開(kāi)關(guān)之前建立專(zhuān)門(mén)用于主從同步的賬號(hào)

5.從庫(kù)打開(kāi)開(kāi)關(guān)的過(guò)程,其實(shí)就是打來(lái)從庫(kù)兩個(gè)線程的過(guò)程

6.start slave

主庫(kù)返回的除了binlog日志內(nèi)容外,還有本次返回日志內(nèi)容后在Master云服務(wù)器端的新的binlog文件名稱(chēng)以及在binlog中的下一個(gè)指定更新的位置。這個(gè)位置會(huì)保存在從庫(kù)的master info里面。

>flush tables  with read  lock;在主庫(kù)上執(zhí)行加上讀鎖

然后另開(kāi)一個(gè)窗口,連接到主mysql

>show master  status;  查看主庫(kù)的binlog以及pos值。

下來(lái)是備份主庫(kù)數(shù)據(jù),將備份數(shù)據(jù)在從庫(kù)上執(zhí)行。目的就是讓從庫(kù)和主庫(kù)的數(shù)據(jù)一樣。

從庫(kù)將主庫(kù)的備份數(shù)據(jù)導(dǎo)入完了以后要將鎖打來(lái):

>unlocks  tables;

然后在從庫(kù)上執(zhí)行change  master語(yǔ)句。這些信息會(huì)記錄在從庫(kù)的master.info的信息中;(如果你備份的時(shí)候指定master-data=1)

最后一步開(kāi)啟start  slave;

查看是否成功使用show slave  status; 查看兩個(gè)進(jìn)程是否為yes。

從庫(kù)里面的relay-log.info:記錄sql線程從中繼里面讀取到的日志。

看完簡(jiǎn)單認(rèn)識(shí)mysql主從同步原理這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI