成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對MySQL主從復制原理的探索

數據庫 MySQL
經歷過一次mysql主從延遲之后,就開始思考,主從復制是什么東西?它是怎么實現的呢?它的原理是什么?于是乎就開始查閱資料、文章,現將自己理解到的內容總結在此,加深印象。

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

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

為什么要做主從復制?

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

2、做數據的熱備

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

mysql主從復制的原理是什么?

binlog: binary log,主庫中保存更新事件日志的二進制文件。

主從復制的基礎是主庫記錄數據庫的所有變更記錄到binlog。binlog是數據庫中保存配置中過期時間內所有修改數據庫結構或內容的一個文件。如果過期時間是10d的話,那么就是最近10d的數據庫修改記錄。

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文件正在被執行的語句的位置

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

 

  • 步驟一:主庫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知識還是需要多多學習。

參考資料

  1. What is MySQL Replication and How Does It Work?
  2. Replication Implementation Details 
責任編輯:龐桂玉 來源: segmentfault
相關推薦

2024-07-04 08:00:24

2025-01-15 15:47:36

2021-01-12 09:03:17

MySQL復制半同步

2020-04-14 16:26:22

MySQL線程同步

2024-07-04 17:22:23

2023-04-06 13:15:48

MySQL復制原理應用實踐

2020-11-13 07:11:23

MySQL復制日志

2025-02-10 10:55:16

2024-03-01 18:33:59

MySQL節點數據

2021-06-08 07:48:27

MySQL主從配置

2024-11-15 15:27:09

2018-05-16 15:26:43

數據庫MySQL主從復制

2025-04-07 00:00:00

MySQL數據庫服務器

2024-10-12 16:25:12

2023-12-25 08:02:09

2017-10-11 15:40:20

MySQL主從復制拓撲結構

2023-03-19 11:53:27

2023-03-19 22:38:12

邏輯復制PostgreSQL

2025-02-28 00:00:00

2023-12-29 13:45:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线视频播放 | 亚洲三级视频 | 91免费在线 | 国产在线视频在线观看 | 欧美精品一区二区三区四区五区 | 国产成人福利视频在线观看 | 性视频网 | 日产精品久久久一区二区福利 | 欧美精品在线播放 | 国产成人精品免高潮在线观看 | 国产精品日韩在线观看一区二区 | 精品免费国产一区二区三区四区介绍 | 亚洲精品乱码久久久久久9色 | av午夜激情 | 精品网站999 | av网址在线| 最新超碰 | 日韩av免费在线观看 | 丝袜 亚洲 另类 欧美 综合 | 久久国产精品无码网站 | 福利网站在线观看 | 日本一二三区在线观看 | 亚洲毛片在线 | 日韩一区二区三区在线播放 | 亚洲国产成人av好男人在线观看 | 欧美亚洲视频 | 狠狠涩 | 久久精品视频在线播放 | 91久久国产| 国产激情福利 | 免费一区二区三区 | 日本在线黄色 | 伊人二区| 欧美一区二区在线 | av网址在线播放 | 午夜久久久久久久久久一区二区 | 黑人精品 | 国产一区二 | 国产一区999 | 日本特黄a级高清免费大片 成年人黄色小视频 | 日韩视频精品在线 |