MySQL 主從復(fù)制原理:
主庫(kù)(Master) 有一個(gè) I/O 線程,從庫(kù)(Slave) 有一個(gè) I/O 線程和 SQL 線程敏储,從庫(kù)的 I/O 線程負(fù)責(zé)讀取主庫(kù)的 binlog烂完,并將其寫入從庫(kù)的中繼日志(relay log) 中钱慢,SQL 線程負(fù)責(zé)讀取和執(zhí)行中繼日志中的 binlog 信息宝磨,并將其轉(zhuǎn)換 SQL 語(yǔ)句,在從庫(kù)上執(zhí)行
MySQL 主從復(fù)制的步驟:
1.首先翰舌,在從庫(kù)服務(wù)器(Slave) 上執(zhí)行 start slave
開啟主從復(fù)制
2.然后嚣潜,從庫(kù)服務(wù)器上的 I/O 線程會(huì)通過主庫(kù)服務(wù)器上授權(quán)具有復(fù)制權(quán)限的用戶請(qǐng)求鏈接主庫(kù)服務(wù)器,并請(qǐng)求返回指定 binlog 日志中指定位置后的 binlog 日志信息內(nèi)容
3.主庫(kù)服務(wù)器接收到來(lái)自從庫(kù)服務(wù)器 I/O 線程的請(qǐng)求后椅贱,主庫(kù)服務(wù)器上的 I/O 線程會(huì)根據(jù)從庫(kù)服務(wù)器上 I/O 線程請(qǐng)求的內(nèi)容讀取指定 binlog 日志文件的指定位置后的日志信息內(nèi)容返回給從庫(kù)服務(wù)器的 I/O 線程懂算,除了返回指定 binlog 日志信息外只冻,還會(huì)返回 binlong 日志文件在主庫(kù)服務(wù)器上新的文件名以及下一次指定更新的位置
4.從庫(kù)服務(wù)器的 I/O 線程接收到來(lái)自主庫(kù)服務(wù)器的 I/O 返回的信息后,將 binlog 日志信息的內(nèi)容依次寫入從庫(kù)服務(wù)器上的中繼日志末端计技,并將新 binlog 文件名以及下一次指定更新的位置保存至 master-info 中喜德,以方便下一次讀取主庫(kù)服務(wù)器可以告訴應(yīng)該從哪一個(gè) binlog 日志文件的哪一個(gè)位置返回日志信息
5.從庫(kù)服務(wù)器的 SQL 線程會(huì)實(shí)時(shí)監(jiān)測(cè)中繼日志中新增的信息,并及時(shí)的將新增的內(nèi)容進(jìn)行解析轉(zhuǎn)換成對(duì)應(yīng) SQL 語(yǔ)句在從庫(kù)服務(wù)器上執(zhí)行
6.經(jīng)過上面步驟后垮媒,主庫(kù)服務(wù)器和從庫(kù)服務(wù)器執(zhí)行了相同的 SQL 語(yǔ)句舍悯,如果復(fù)制正常的話,則主從數(shù)據(jù)一致