最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL實(shí)現(xiàn)主從復(fù)制的原理詳解

 更新時間:2023年07月02日 16:18:45   作者:DannyIdea  
這篇文章主要為大家介紹了MySQL的主從復(fù)制是怎么實(shí)現(xiàn)的,文中有相關(guān)的圖文介紹和代碼示例,具有一定的參考價值,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧

主從復(fù)制是怎么實(shí)現(xiàn)的呢?

當(dāng)MySQL數(shù)據(jù)庫發(fā)生寫操作的時候會記錄下binlog,它是一種邏輯日志。有了這個 binlog,從服務(wù)器會獲取主服務(wù)器的 binlog 文件,然后解析里面的 SQL 語句,在從服務(wù)器上面執(zhí)行一遍,保持主從的數(shù)據(jù)一致。

這里面涉及到三個線程:

IO線程

連接到 master 獲取 binlog,并且解析 binlog 寫入中繼日志,這個線程叫做 I/O 線程。

log dump線程

master 節(jié)點(diǎn)上有一個 log dump 線程,是用來發(fā)送 binlog 給 slave 的。 

sql線程

從庫的 sql 線程,是用來讀取 relay log,把數(shù)據(jù)寫入到數(shù)據(jù)庫的。

主從復(fù)制的方式

異步復(fù)制

在異步復(fù)制中,主庫執(zhí)行完操作后,寫入binlog日志后,就返回客戶端,這一動作就結(jié)束了,并不會驗(yàn)證從庫有沒有收到,完不完整,所以這樣可能會造成數(shù)據(jù)的不一致。

說到底,復(fù)制過程中數(shù)據(jù)是否一致,主要取決于Binlog日志的安全性與完整性

在MySQL中,有sync_binlog=n這一參數(shù),他的值表示每進(jìn)行n次事務(wù)提交,MySQL就將Binlog刷新到磁盤。如果這個值為1,就代表每提交一次事務(wù)(SQL),就將Binlog往磁盤刷新一次,這樣一來,就算數(shù)據(jù)庫宕機(jī)了,那么最多只能損失一次事務(wù)的數(shù)據(jù)。

但是,一旦多個事務(wù)并發(fā)提交時,由于受sync_binlog的限制,MySQL只能按順序來處理這些請求,另外,高頻率的刷新binlog對IO的影響也很大,進(jìn)一步影響了數(shù)據(jù)庫的性能,所以,一般這個值都設(shè)為0或者其他值,在數(shù)據(jù)的安全性和高并發(fā)下的性能之間取得一個平衡。

為了更加有效的保護(hù)Binlog的安全性和完整性,MySQL5 .5之后引入了半同步復(fù)制

半同步復(fù)制

在異步復(fù)制中,我們遇到的一個主要問題就是,在復(fù)制過程當(dāng)中,主庫不會去驗(yàn)證Binlog有沒有成功復(fù)制到從庫,那如果主庫提交一個事務(wù)并寫入Binlog中后,當(dāng)從庫還沒有從主庫得到Binlog時,主庫宕機(jī)了或因磁盤損壞等故障導(dǎo)致該事務(wù)的Binlog丟失了,那從庫就不會得到這個事務(wù),也就造成了主從數(shù)據(jù)的不一致。

而半同步復(fù)制,當(dāng)主庫每提交一個事務(wù)后,不會立即返回,而是等待其中一個從庫接收到Binlog并成功寫入Relay-log中才返回客戶端,所以這樣就保證了一個事務(wù)至少有兩份日志,一份保存在主庫的Binlog,另一份保存在其中一個從庫的Relay-log中,從而保證了數(shù)據(jù)的安全性和一致性。

另外,在半同步復(fù)制時,如果主庫的一個事務(wù)提交成功了,在推送到從庫的過程當(dāng)中,從庫宕機(jī)了或網(wǎng)絡(luò)故障,導(dǎo)致從庫并沒有接收到這個事務(wù)的Binlog,此時主庫會等待一段時間(這個時間由rpl_semi_sync_master_timeout的毫秒數(shù)決定),如果這個時間過后還無法推送到從庫,那MySQL會自動從半同步復(fù)制切換為異步復(fù)制,當(dāng)從庫恢復(fù)正常連接到主庫后,主庫又會自動切換回半同步復(fù)制。

半同步復(fù)制的“半”體現(xiàn)在,雖然主從庫的Binlog是同步的,但主庫不會等待從庫執(zhí)行完Relay-log后才返回,而是確認(rèn)從庫接收到Binlog,達(dá)到主從Binlog同步的目的后就返回了,所以從庫的數(shù)據(jù)對于主庫來說還是有延時的,這個延時就是從庫執(zhí)行Relay-log的時間。所以只能稱為半同步。

總之這兩種策略,可以濃縮理解為,一個是“不管不問”,一個是“確認(rèn)到位就跑”。

讀寫分離

做了主從復(fù)制的方案之后,我們只把數(shù)據(jù)寫入 master 節(jié)點(diǎn),而讀的請求可以分擔(dān)到slave 節(jié)點(diǎn), 這種方案我們稱之為讀寫分離。

讀寫分離可以一定程度低減輕數(shù)據(jù)庫服務(wù)器的訪問壓力,但是需要特別注意主從數(shù)據(jù)一致性的問題。

我們在做了主從復(fù)制之后,如果單個 master 節(jié)點(diǎn)或者單張表存儲的數(shù)據(jù)過大的時候,比如一張表有上億的數(shù)據(jù),單表的查詢性能還是會下降,我們要進(jìn)一步對單臺數(shù)據(jù)庫節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行拆分,而這個拆分就是分庫分表。

常見的分庫分表策略

垂直分庫

把一個數(shù)據(jù)庫按照業(yè)務(wù)拆分成不同的數(shù)據(jù)庫:

水平分庫分表

把單張表的數(shù)據(jù)按照一定的規(guī)則分布到多個數(shù)據(jù)庫。

到此這篇關(guān)于MySQL實(shí)現(xiàn)主從復(fù)制的原理詳解的文章就介紹到這了,更多相關(guān)MySQL 主從復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql 5.7.17 安裝配置方法圖文教程(CentOS7)

    mysql 5.7.17 安裝配置方法圖文教程(CentOS7)

    這篇文章主要為大家詳細(xì)介紹了CentOS7下mysql 5.7.17 安裝配置方法圖文教程,感興趣的小伙伴們可以參考一下
    2016-12-12
  • MySQL中SQL Mode的查看與設(shè)置詳解

    MySQL中SQL Mode的查看與設(shè)置詳解

    在本篇文章里小編給各位分享的是關(guān)于MySQL中SQL Mode的查看與設(shè)置詳解內(nèi)容,需要的朋友們可以參考下。
    2020-03-03
  • MySQL處理重復(fù)數(shù)據(jù)的各種技術(shù)和方法(預(yù)防、檢測與刪除)

    MySQL處理重復(fù)數(shù)據(jù)的各種技術(shù)和方法(預(yù)防、檢測與刪除)

    這篇文章主要介紹了MySQL中處理重復(fù)數(shù)據(jù)的技術(shù)和方法,包括重復(fù)數(shù)據(jù)的產(chǎn)生原因、影響、預(yù)防方案、刪除方案(臨時表法、直接刪除法、窗口函數(shù))以及高級應(yīng)用場景和性能優(yōu)化建議,需要的朋友可以參考下
    2025-11-11
  • 實(shí)例操作MySQL短鏈接

    實(shí)例操作MySQL短鏈接

    在本文里我們給大家總結(jié)了關(guān)于MySQL短鏈接的實(shí)操方法和相關(guān)知識點(diǎn),有需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • MySQL使用show processlist命令的實(shí)現(xiàn)

    MySQL使用show processlist命令的實(shí)現(xiàn)

    本文詳細(xì)解析了MySQL的showprocesslist命令,包括其功能、返回參數(shù)、Command值和State值的含義,及利用它來診斷和優(yōu)化高CPU或iowait問題,感興趣的可以了解一下
    2025-10-10
  • 深入理解?MySQL?鎖機(jī)制之全局鎖、表鎖與行鎖深度解析

    深入理解?MySQL?鎖機(jī)制之全局鎖、表鎖與行鎖深度解析

    MySQL?作為主流關(guān)系型數(shù)據(jù)庫,其鎖機(jī)制設(shè)計尤為關(guān)鍵,本文將圍繞全局鎖、表鎖、行鎖?三種鎖類型,深入剖析其原理、使用場景與注意事項(xiàng),幫助你更好地理解并優(yōu)化數(shù)據(jù)庫并發(fā)性能,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • Mysql安裝與卸載、Navicat工具的使用詳細(xì)教程

    Mysql安裝與卸載、Navicat工具的使用詳細(xì)教程

    Navicat是一套快速、可靠和全面的數(shù)據(jù)庫管理工具,專門用于簡化數(shù)據(jù)庫管理和降低管理成本,這篇文章主要介紹了Mysql安裝與卸載、Navicat工具使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • MySQL獲取行號的示例代碼

    MySQL獲取行號的示例代碼

    MySQL變量是一種用于存儲和操縱數(shù)據(jù)的數(shù)據(jù)類型,通過在SQL查詢中使用變量,我們可以創(chuàng)建一個MySQL查詢,用于獲取每行數(shù)據(jù)的行號,這篇文章主要介紹了MySQL 如何獲取行號,需要的朋友可以參考下
    2023-08-08
  • MySql?InnoDB存儲引擎之Buffer?Pool運(yùn)行原理講解

    MySql?InnoDB存儲引擎之Buffer?Pool運(yùn)行原理講解

    緩沖池是用于存儲InnoDB表,索引和其他輔助緩沖區(qū)的緩存數(shù)據(jù)的內(nèi)存區(qū)域。緩沖池的大小對于系統(tǒng)性能很重要。更大的緩沖池可以減少磁盤I/O來多次訪問同一表數(shù)據(jù)。在專用數(shù)據(jù)庫服務(wù)器上,可以將緩沖池大小設(shè)置為計算機(jī)物理內(nèi)存大小的百分之80
    2023-01-01
  • MySQL長字符截斷的實(shí)現(xiàn)示例

    MySQL長字符截斷的實(shí)現(xiàn)示例

    本文主要介紹了MySQL長字符截斷的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論

荆门市| 健康| 邹平县| 海门市| 天气| 涡阳县| 垫江县| 新巴尔虎左旗| 梁山县| 灵台县| 河曲县| 京山县| 六安市| 龙胜| 固镇县| 湾仔区| 涞水县| 甘泉县| 黄平县| 达州市| 岳池县| 海林市| 东乌珠穆沁旗| 乐东| 如东县| 海阳市| 眉山市| 聂拉木县| 隆德县| 彭州市| 通州市| 高密市| 兴安县| 哈巴河县| 泰和县| 桐乡市| 宁海县| 上饶市| 宁国市| 金湖县| 基隆市|