首頁 >資料庫 >mysql教程 >mysql主從複製原理是什麼

mysql主從複製原理是什麼

coldplay.xixi
coldplay.xixi原創
2020-10-30 11:55:5123253瀏覽

mysql主從複製原理:首先主庫發送更新事件到從庫;然後從庫讀取更新記錄,並執行更新記錄;最後使得從庫的內容與主庫保持一致。

mysql主從複製原理是什麼

相關免費學習推薦:mysql影片教學

#mysql主從複製原理:

為什麼要做主從複製

  • 在業務複雜的系統中,有這麼一個情景,有一句sql語句需要鎖表,導致暫時不能使用讀的服務,那麼就很影響運行中的業務,使用主從複製,讓主庫負責寫,從庫負責讀,這樣,即使主庫出現了鎖定表的情景,透過讀取從庫也可以確保業務的正常運作。

  • 做資料的熱備,主庫宕機後能夠及時替換主庫,保證業務可用性。

  • 架構的擴充。業務量越來越大,I/O存取頻率過高,單機無法滿足,此時做多庫的存儲,降低磁碟I/O存取的頻率,提高單一機器的I/O效能。

MySQL主從複製的流程

mysql主從複製原理是什麼

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

主庫創建一個binlog dump thread,把binlog的內容發送到從庫

從庫啟動並發起連接,連接到主庫

#從庫啟動之後,建立一個I/O線程,讀取主庫傳過來的binlog內容並寫入到relay log

從庫啟動之後,建立一個SQL線程,從relay log裡面讀取內容,從Exec_Master_Log_Pos位置開始執行讀取到的更新事件,將更新內容寫入到slave的db

註:上述流程為相對流程,並非絕對流程

MySQL主從複製的原理

MySQL主從複製是一個非同步的複製過程,主庫發送更新事件到從庫,從庫讀取更新記錄,並執行更新記錄,使得從庫的內容與主庫保持一致。

binlog:binary log,主庫中保存所有更新事件日誌的二進位。 binlog是資料庫服務啟動的一刻起,保存資料庫所有變更記錄(資料庫結構和內容)的檔案。在主庫中,只要有更新事件出現,就會依序寫入binlog中,之後會推送到從庫中作為從庫進行複製的資料來源。

binlog輸出執行緒:每當有從庫連接到主庫的時候,主庫都會建立一個執行緒然後發送binlog內容到從庫。對於每一個即將傳送給從函式庫的sql事件,binlog輸出執行緒會將其鎖住。一旦該事件被線程讀取完之後,該鎖會被釋放,即使在該事件完全發送到從庫的時候,該鎖也會被釋放。

在從函式庫中,當複製開始時,從函式庫就會建立從函式庫I/O執行緒和從函式庫的SQL執行緒進行複製處理。

從庫I/O線程:當START SLAVE語句在從庫開始執行之後,從庫創建一個I/O線程,該線程連接到主庫並請求主庫發送binlog裡面的更新記錄到從庫上。從庫I/O執行緒讀取主庫的binlog輸出執行緒發送的更新並拷貝這些更新到本機文件,其中包括relay log文件。

從函式庫的SQL執行緒:從函式庫建立一個SQL線程,這個執行緒讀取從函式庫I/O執行緒寫到relay log的更新事件並執行。

綜上所述,可知:

對於每一個主從複製的連接,都有三個線程。擁有多個從庫的主庫為每一個連接到主庫的從庫創建一個binlog輸出線程,每一個從庫都有它自己的I/O線程和SQL線程。

從函式庫透過建立兩個獨立的線程,使得在進行複製時,從庫的讀和寫進行了分離。因此,即使負責執行的執行緒運行較慢,負責讀取更新語句的執行緒並不會因此變得緩慢。比方說,如果從庫有一段時間沒運行了,當它在此啟動的時候,儘管它的SQL線程執行比較慢,它的I/O線程可以快速地從主庫裡讀取所有的binlog內容。這樣一來,即使從庫在SQL線程執行完所有讀取到的語句前停止運行了,I/O線程也至少完全讀取了所有的內容,並將其安全地備份在從庫本地的relay log ,隨時準備在從庫下一次啟動的時候執行語句。

以上是mysql主從複製原理是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn