成人免费观看网欧美片-成人免费观看视频-成人免费观看男女羞羞视频-成人免费观看的视频黄页-成人免费高清视频-成人免费福利片在线观看

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 怎么確保mysql數(shù)據(jù)庫(kù)主從數(shù)據(jù)一定是一樣的?

怎么確保mysql數(shù)據(jù)庫(kù)主從數(shù)據(jù)一定是一樣的?

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-13 19:55:00 1697198100

  一、確保mysql數(shù)據(jù)庫(kù)主從數(shù)據(jù)一定是一樣的方法

  

 

  1、確保同步狀態(tài)正常

  主從數(shù)據(jù)庫(kù)的同步狀態(tài)正常是保證主從數(shù)據(jù)一致性的前提,需要定期監(jiān)控主從同步狀態(tài),并及時(shí)處理同步異常情況。

  2、配置和參數(shù)設(shè)置保持一致

  主從數(shù)據(jù)庫(kù)的配置和參數(shù)設(shè)置必須一致,否則可能導(dǎo)致主從數(shù)據(jù)不一致問(wèn)題。可以通過(guò)檢查my.cnf文件、SHOW VARIABLES命令等方式來(lái)確認(rèn)配置和參數(shù)是否一致。

  3、定期備份和比對(duì)數(shù)據(jù)

  定期備份主從數(shù)據(jù)庫(kù)數(shù)據(jù),并進(jìn)行比對(duì),查看是否有差異。可以使用mysqldump工具或者其他自動(dòng)化備份工具進(jìn)行備份,并使用比對(duì)工具進(jìn)行數(shù)據(jù)檢查。

  4、選擇合適的數(shù)據(jù)同步方式

  使用適當(dāng)?shù)臄?shù)據(jù)同步方式能夠更好地保證主從數(shù)據(jù)的一致性。例如,使用基于GTID或binlog格式的數(shù)據(jù)同步方式,可確保主從數(shù)據(jù)的同步流程更為精確和可靠。

  二、MySQL主從

  1、數(shù)據(jù)庫(kù)主從概念

  主從數(shù)據(jù)庫(kù)是什么意思呢,主是主庫(kù)的意思,從是從庫(kù)的意思。數(shù)據(jù)庫(kù)主庫(kù)對(duì)外提供讀寫(xiě)的操作,從庫(kù)對(duì)外提供讀的操作。

  數(shù)據(jù)庫(kù)需要主從架構(gòu)的原因:

  高可用,實(shí)時(shí)災(zāi)備,用于故障切換。比如主庫(kù)掛了,可以切從庫(kù)。讀寫(xiě)分離,提供查詢服務(wù),減少主庫(kù)壓力,提升性能備份數(shù)據(jù),避免影響業(yè)務(wù)。

  2、數(shù)據(jù)庫(kù)主從復(fù)制原理

  主從復(fù)制原理,簡(jiǎn)言之,分三步曲進(jìn)行:

  主數(shù)據(jù)庫(kù)有個(gè)bin log二進(jìn)制文件,紀(jì)錄了所有增刪改SQL語(yǔ)句。(binlog線程)從數(shù)據(jù)庫(kù)把主數(shù)據(jù)庫(kù)的bin log文件的SQL 語(yǔ)句復(fù)制到自己的中繼日志 relay log(io線程)從數(shù)據(jù)庫(kù)的relay log重做日志文件,再執(zhí)行一次這些sql語(yǔ)句。(Sql執(zhí)行線程)

  詳細(xì)的主從復(fù)制過(guò)程如圖:

  上圖主從復(fù)制過(guò)程分了五個(gè)步驟進(jìn)行:

  主庫(kù)的更新SQL(update、insert、delete)被寫(xiě)到binlog從庫(kù)發(fā)起連接,連接到主庫(kù)。此時(shí)主庫(kù)創(chuàng)建一個(gè)binlog dump thread,把bin log的內(nèi)容發(fā)送到從庫(kù)。從庫(kù)啟動(dòng)之后,創(chuàng)建一個(gè)I/O線程,讀取主庫(kù)傳過(guò)來(lái)的bin log內(nèi)容并寫(xiě)入到relay log從庫(kù)還會(huì)創(chuàng)建一個(gè)SQL線程,從relay log里面讀取內(nèi)容,從ExecMasterLog_Pos位置開(kāi)始執(zhí)行讀取到的更新事件,將更新內(nèi)容寫(xiě)入到slave的db

  3、主主、主從、主備的區(qū)別

  數(shù)據(jù)庫(kù)主主:兩臺(tái)都是主數(shù)據(jù)庫(kù),同時(shí)對(duì)外提供讀寫(xiě)操作。客戶端訪問(wèn)任意一臺(tái)。數(shù)據(jù)存在雙向同步。數(shù)據(jù)庫(kù)主從:一臺(tái)是主數(shù)據(jù)庫(kù),同時(shí)對(duì)外提供讀寫(xiě)操作。一臺(tái)是從數(shù)據(jù)庫(kù),對(duì)外提供讀的操作。數(shù)據(jù)從主庫(kù)同步到從庫(kù)。數(shù)據(jù)庫(kù)主從:一臺(tái)是主數(shù)據(jù)庫(kù),同時(shí)對(duì)外提供讀寫(xiě)操作。一臺(tái)是從數(shù)據(jù)庫(kù),對(duì)外提供讀的操作。數(shù)據(jù)從主庫(kù)同步到從庫(kù)。

  4、MySQL是怎么保證主從一致的

  我們學(xué)習(xí)數(shù)據(jù)庫(kù)的主從復(fù)制原理后,了解到從庫(kù)拿到并執(zhí)行主庫(kù)的binlog日志,就可以保持?jǐn)?shù)據(jù)與主庫(kù)一致了。這是為什么呢?哪些情況會(huì)導(dǎo)致不一致呢?

  長(zhǎng)鏈接:

  主庫(kù)和從庫(kù)在同步數(shù)據(jù)的過(guò)程中斷怎么辦呢,數(shù)據(jù)不就會(huì)丟失了嘛。因此主庫(kù)與從庫(kù)之間維持了一個(gè)長(zhǎng)鏈接,主庫(kù)內(nèi)部有一個(gè)線程,專門(mén)服務(wù)于從庫(kù)的這個(gè)長(zhǎng)鏈接的。

  binlog格式:

  binlog日志有三種格式,分別是statement,row和mixed。如果是statement格式,binlog記錄的是SQL的原文,如果主庫(kù)和從庫(kù)選的索引不一致,可能會(huì)導(dǎo)致主庫(kù)不一致。我們來(lái)分析一下。假設(shè)主庫(kù)執(zhí)行刪除這個(gè)SQL(其中a和create_time都有索引)如下:

  delete from t where a > '666' and create_time<'2022-03-01' limit 1;

  我們知道,數(shù)據(jù)選擇了a索引和選擇create_time索引,最后limit 1出來(lái)的數(shù)據(jù)一般是不一樣的。所以就會(huì)存在這種情況:在binlog = statement格式時(shí),主庫(kù)在執(zhí)行這條SQL時(shí),使用的是索引a,而從庫(kù)在執(zhí)行這條SQL時(shí),使用了索引create_time。最后主從數(shù)據(jù)不一致了。

  解決這個(gè)問(wèn)題的方法:可以把binlog格式修改為row。row格式的binlog日志,記錄的不是SQL原文,而是兩個(gè)event:Table_map 和 Delete_rows。Table_map event說(shuō)明要操作的表,Delete_rows event用于定義要?jiǎng)h除的行為,記錄刪除的具體行數(shù)。row格式的binlog記錄的就是要?jiǎng)h除的主鍵ID信息,因此不會(huì)出現(xiàn)主從不一致的問(wèn)題。

  但是如果SQL刪除10萬(wàn)行數(shù)據(jù),使用row格式就會(huì)很占空間的,10萬(wàn)條數(shù)據(jù)都在binlog里面,寫(xiě)binlog的時(shí)候也很耗IO。但是statement格式的binlog可能會(huì)導(dǎo)致數(shù)據(jù)不一致,因此設(shè)計(jì)MySQL的大叔想了一個(gè)折中的方案,mixed格式的binlog。所謂的mixed格式其實(shí)就是row和statement格式混合使用,當(dāng)MySQL判斷可能數(shù)據(jù)不一致時(shí),就用row格式,否則使用就用statement格式。

  延伸閱讀1:MySQL的特點(diǎn)

  性能卓越服務(wù)穩(wěn)定,很少出現(xiàn)異常宕機(jī)開(kāi)放源代碼且無(wú)版權(quán)制約,自主性強(qiáng)、使用成本低。歷史悠久、社區(qū)及用戶非常活躍,遇到問(wèn)題,可以很快獲取到幫助。軟件體積小,安裝使用簡(jiǎn)單,并且易于維護(hù),安裝及維護(hù)成本低。支持多種操作系統(tǒng),提供多種api幾口,支持多種開(kāi)發(fā)語(yǔ)言。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
PHP數(shù)組具的特性有哪些?

一、有序集合PHP數(shù)組是一個(gè)有序的數(shù)據(jù)集合,它可以存儲(chǔ)多個(gè)值,并使用索引來(lái)訪問(wèn)這些值。索引可以是數(shù)字或字符串,允許你以靈活的方式組織和訪...詳情>>

2023-10-13 23:46:55
C語(yǔ)言中定義與聲明的含義是什么?

一、定義的含義在C語(yǔ)言中,定義是指為變量、函數(shù)或類型分配存儲(chǔ)空間并指定其屬性和初始值的過(guò)程。定義的主要含義如下:分配存儲(chǔ)空間:定義一個(gè)...詳情>>

2023-10-13 23:32:41
APP開(kāi)發(fā)中常用的開(kāi)發(fā)語(yǔ)言都有什么?

一、JavaJava是一種廣泛使用的開(kāi)發(fā)語(yǔ)言,尤其在Android應(yīng)用開(kāi)發(fā)中得到了廣泛應(yīng)用。Java具有面向?qū)ο蟮奶匦裕梢詫?shí)現(xiàn)復(fù)雜的應(yīng)用邏輯和交互效果...詳情>>

2023-10-13 23:29:28
Python的自動(dòng)化測(cè)試框架有哪些?

一、unittestunittest是Python內(nèi)置的測(cè)試框架,它受到Java的JUnit框架的啟發(fā)。unittest提供了一個(gè)面向?qū)ο蟮木幊棠P停试S開(kāi)發(fā)人員編寫(xiě)測(cè)試用...詳情>>

2023-10-13 23:06:20
Web前端開(kāi)發(fā)工具有哪些?

一、代碼編輯器代碼編輯器是Web前端開(kāi)發(fā)的基礎(chǔ)工具之一,用于編寫(xiě)、編輯和修改計(jì)算機(jī)代碼。它通常支持多種編程語(yǔ)言,并提供了一些便捷的功能,...詳情>>

2023-10-13 22:58:11
快速通道