更新時間:2022-08-31 10:17:44 來源:動力節(jié)點 瀏覽2314次
MySQL主從復制的原理是相當基礎的知識。

MySQL主從復制是一個異步復制過程(但總體感覺是實時同步的)。
數(shù)據(jù)庫數(shù)據(jù)從一個 MySQL 數(shù)據(jù)庫(我們稱之為 Master)復制到另一個 MySQL 數(shù)據(jù)庫(我們稱之為 Slave)。
Master和Slave之間主從復制的整個過程是由三個線程完成的。
lave 端有兩個線程(SQL 線程和 IO 線程),Master 端有另一個線程(IO 線程)。(來自 MySQL 幫助文檔)
在Slave服務器上執(zhí)行start slave,開啟主從復制開關。
此時,Slave 服務器上的 IO 線程通過 Master 服務器上授權復制用戶的請求連接到 Master 服務器。
它還請求從 binlog 日志文件的指定位置發(fā)送 binlog 日志內容。
(配置主從復制任務時執(zhí)行change master命令時指定日志文件名和位置)
Master服務器收到Slave服務器IO線程的請求后,Master服務器上的IO線程是基于Slave的。
服務器的IO線程請求的信息在指定binlog日志文件的指定位置后讀取binlog日志信息,然后返回給Slave端
IO線程。除了binlog日志內容,在日志內容返回后Master服務器端還有一個新的binlog。
binlog 中的文件名和下一個指定的更新位置。
當 Slave 服務器的 IO 線程從 Master 服務器獲取 IO 線程發(fā)送的日志內容、日志文件和位置點時,添加 binlog。
日志內容依次寫入Slave端自身的relay log文件(mysql -relay-bin.xxxxxx)的末尾。
并將新的binlog文件名和位置記錄到master-info文件中,以便下次讀取Master端新的binlog日志日志時,
可以告訴Master服務器從新的binlog日志中從哪個文件以及從哪里開始請求新的binlog日志內容.
Slave server端的SQL線程實時檢測本地relay log中新增的日志內容,及時relay log。
該文件的內容被解析成在Master端執(zhí)行的SQL語句的內容,在Slave服務器本身按照語句的順序執(zhí)行SQL的應用。
聲明,申請后清理日志。
經(jīng)過上述過程,可以保證在Master和Slave端執(zhí)行相同的SQL語句。當復制狀態(tài)正常時,Master端和lave端的數(shù)據(jù)是完全一致的。