久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql主從復制的工作原理

124次閱讀
沒有評論

共計 1635 個字符,預計需要花費 5 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章給大家分享的是有關 mysql 主從復制的工作原理的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考。一起跟隨丸趣 TV 小編過來看看吧。

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 主從復制的工作原理就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計1635字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 阿尔山市| 雷州市| 彝良县| 阿坝县| 荥经县| 齐齐哈尔市| 克山县| 唐海县| 洱源县| 雅江县| 胶南市| 呈贡县| 鸡西市| 义马市| 馆陶县| 万年县| 喀喇| 扶余县| 新野县| 晴隆县| 乌拉特前旗| 利津县| 桂阳县| 同心县| 斗六市| 灵台县| 兰州市| 宁蒗| 阿合奇县| 富宁县| 竹山县| 临清市| 涡阳县| 昌平区| 疏附县| 新安县| 深泽县| 灵宝市| 富源县| 鄂尔多斯市| 攀枝花市|