當前位置:
首頁 > 知識 > mysql主從複製原理探索

mysql主從複製原理探索

上一篇文章裡面,講到了遇到mysql主從延遲的坑,對於這次的坑多說兩句,以前也看過這樣的例子,也知道不能夠寫完之後馬上更新,但是真正開發的時候還是沒有注意到這一點,道理大家都懂,但是還是會犯錯,只有等到自己親生體驗到該錯誤之後,才真正的掌握到該道理。

經歷過一次mysql主從延遲之後,就開始思考,主從複製是什麼東西?它是怎麼實現的呢?它的原理是什麼?於是乎就開始查閱資料、文章,現將自己理解到的內容總結在此,加深印象。

為什麼要做主從複製?

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

2、做數據的熱備

3、架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁碟I/O訪問的頻率,提高單個機器的I/O性能。

mysql主從複製的原理是什麼?

binlog: binary log,主庫中保存所有更新事件日誌的二進位文件。

主從複製的基礎是主庫記錄資料庫的所有變更記錄到binlog。binlog是資料庫伺服器啟動的那一刻起,保存所有修改資料庫結構或內容的一個文件。

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

在主庫里,只要有更新事件出現,就會被依次地寫入到binlog裡面,之後會推到從庫中作為從庫進行複製的數據源。

binlog輸出線程。每當有從庫連接到主庫的時候,主庫都會創建一個線程然後發送binlog內容到從庫。

對於每一個即將發送給從庫的sql事件,binlog輸出線程會將其鎖住。一旦該事件被線程讀取完之後,該鎖會被釋放,即使在該事件完全發送到從庫的時候,該鎖也會被釋放。

在從庫里,當複製開始的時候,從庫就會創建兩個線程進行處理:

從庫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,隨時準備在從庫下一次啟動的時候執行語句。

查看主從複製的狀態

當主從複製正在進行中時,如果想查看從庫兩個線程運行狀態,可以通過執行在從庫里執行」show slave statusG」語句,以下的欄位可以給你想要的信息:

Master_Log_File — 上一個從主庫拷貝過來的binlog文件
Read_Master_Log_Pos — 主庫的binlog文件被拷貝到從庫的relay log中的位置
Relay_Master_Log_File — SQL線程當前處理中的relay log文件
Exec_Master_Log_Pos — 當前binlog文件正在被執行的語句的位置

整個主從複製的流程可以通過以下圖示理解:

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知識還是需要多多學習。

參考資料

原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

如果本文對你有幫助,請點下推薦吧,謝謝^_^

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

官方Tomcat鏡像Dockerfile分析及鏡像使用
基於多線程方式的串列通信介面數據接收案例

TAG:達人科技 |

您可能感興趣

adb使用技巧和usb通信原理探索
代幣驅動治理結構的探索者District0x
《Control》更注重探索而非重複 解謎涉及物理知識
Naturali CTO、ACL Fellow林德康:探索問答系統和機器閱讀理解
friedman benda舉行並行展覽 探索建築師傢具設計
Learning Memory Access Patterns,資料庫+機器學習探索
Redis探索之路
Service Mesh的本質、價值和應用探索
本周藝術探索-Rompin』 Robots
「白泥潔凈面膜」 ×Philosophy「凈透天使」Jessica鄭秀妍 與Jessica鄭秀妍一起,探索philosophy的奇蹟之美
《Chernobylite》宣傳片 開發者親自探索核災區
螞蟻金服 Service Mesh 實踐探索
區塊鏈行業Smart Beta的探索
一款為Oculus Quest打造藝術作品亮相,主打空間探索
Oculus CTO卡馬克:正大力探索Oculus Quest的手指追蹤
探索TimelinePlayableAPI,讓Timeline為所欲為
以Vinyāsa探索健康的「關係」
上周藝術探索回顧-Knights,Princess and Dragons
Oculus再公布Quest首發應用:《國家地理探索VR》
一款為Oculus Quest打造的藝術作品亮相,主打空間探索