更新時間:2022-08-31 10:17:44 來源:動力節點 瀏覽1541次
MySQL主從復制的原理是相當基礎的知識。
MySQL主從復制是一個異步復制過程(但總體感覺是實時同步的)。
數據庫數據從一個 MySQL 數據庫(我們稱之為 Master)復制到另一個 MySQL 數據庫(我們稱之為 Slave)。
Master和Slave之間主從復制的整個過程是由三個線程完成的。
lave 端有兩個線程(SQL 線程和 IO 線程),Master 端有另一個線程(IO 線程)。(來自 MySQL 幫助文檔)
在Slave服務器上執行start slave,開啟主從復制開關。
此時,Slave 服務器上的 IO 線程通過 Master 服務器上授權復制用戶的請求連接到 Master 服務器。
它還請求從 binlog 日志文件的指定位置發送 binlog 日志內容。
(配置主從復制任務時執行change master命令時指定日志文件名和位置)
Master服務器收到Slave服務器IO線程的請求后,Master服務器上的IO線程是基于Slave的。
服務器的IO線程請求的信息在指定binlog日志文件的指定位置后讀取binlog日志信息,然后返回給Slave端
IO線程。除了binlog日志內容,在日志內容返回后Master服務器端還有一個新的binlog。
binlog 中的文件名和下一個指定的更新位置。
當 Slave 服務器的 IO 線程從 Master 服務器獲取 IO 線程發送的日志內容、日志文件和位置點時,添加 binlog。
日志內容依次寫入Slave端自身的relay log文件(mysql -relay-bin.xxxxxx)的末尾。
并將新的binlog文件名和位置記錄到master-info文件中,以便下次讀取Master端新的binlog日志日志時,
可以告訴Master服務器從新的binlog日志中從哪個文件以及從哪里開始請求新的binlog日志內容.
Slave server端的SQL線程實時檢測本地relay log中新增的日志內容,及時relay log。
該文件的內容被解析成在Master端執行的SQL語句的內容,在Slave服務器本身按照語句的順序執行SQL的應用。
聲明,申請后清理日志。
經過上述過程,可以保證在Master和Slave端執行相同的SQL語句。當復制狀態正常時,Master端和lave端的數據是完全一致的。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習