亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL主從同步延遲原因與解決方案

 更新時(shí)間:2023年11月14日 16:17:46   作者:逆流°只是風(fēng)景-bjhxcc  
本文主要介紹了MySQL主從同步延遲原因與解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、MySQL數(shù)據(jù)庫(kù)主從同步延遲產(chǎn)生的原因

MySQL的主從復(fù)制都是單線程的操作,主庫(kù)對(duì)所有DDL和DML產(chǎn)生的日志寫進(jìn)binlog,由于binlog是順序?qū)懀孕屎芨摺?/p>

Slave的SQL Thread線程將主庫(kù)的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是隨即的,不是順序的,成本高很多。 

另一方面,由于SQL Thread也是單線程的,當(dāng)主庫(kù)的并發(fā)較高時(shí),產(chǎn)生的DML數(shù)量超過(guò)slave的SQL Thread所能處理的速度,或者當(dāng)slave中有大型query語(yǔ)句產(chǎn)生了鎖等待那么延時(shí)就產(chǎn)生了。

常見(jiàn)原因:Master負(fù)載過(guò)高、Slave負(fù)載過(guò)高、網(wǎng)絡(luò)延遲、機(jī)器性能太低、MySQL配置不合理。

二、關(guān)于DDL和DML

SQL語(yǔ)言共分為以下幾大類:查詢語(yǔ)言DQL,控制語(yǔ)言DCL,操縱語(yǔ)言DML,定義語(yǔ)言DDL。事務(wù)控制TCL.

  • DQL(Data QUERY Languages)語(yǔ)句:即數(shù)據(jù)庫(kù)定義語(yǔ)句,用來(lái)查詢SELECT子句,F(xiàn)ROM子句,WHERE子句組成的查詢塊,比如:select–from–where–grouop by–having–order by–limit
  • DDL(Data Definition Languages)語(yǔ)句:即數(shù)據(jù)庫(kù)定義語(yǔ)句,用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)中的表、索引、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等,常用的語(yǔ)句關(guān)鍵字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增刪改表的結(jié)構(gòu)
  • DML(Data Manipulation Language)語(yǔ)句:即數(shù)據(jù)操縱語(yǔ)句,用來(lái)查詢、添加、更新、刪除等,常用的語(yǔ)句關(guān)鍵字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增刪改查。增刪改表的數(shù)據(jù)
  • DCL(Data Control Language)語(yǔ)句:即數(shù)據(jù)控制語(yǔ)句,用于授權(quán)/撤銷數(shù)據(jù)庫(kù)及其字段的權(quán)限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的語(yǔ)句關(guān)鍵字有:GRANT,REVOKE。
  • TCL(Transaction Control Language)語(yǔ)句:事務(wù)控制語(yǔ)句,用于控制事務(wù),常用的語(yǔ)句關(guān)鍵字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

三、主從延時(shí)排查方法

通過(guò)監(jiān)控 show slave status 命令輸出的Seconds_Behind_Master參數(shù)的值來(lái)判斷:

  • NULL,表示io_thread或是sql_thread有任何一個(gè)發(fā)生故障;
  • 0,該值為零,表示主從復(fù)制良好;
  • 正值,表示主從已經(jīng)出現(xiàn)延時(shí),數(shù)字越大表示從庫(kù)延遲越嚴(yán)重

四、解決方案

解決數(shù)據(jù)丟失的問(wèn)題:

半同步復(fù)制
從MySQL5.5開(kāi)始,MySQL已經(jīng)支持半同步復(fù)制了,半同步復(fù)制介于異步復(fù)制和同步復(fù)制之間,主庫(kù)在執(zhí)行完事務(wù)后不立刻返回結(jié)果給客戶端,需要等待至少一個(gè)從庫(kù)接收到并寫到relay log中才返回結(jié)果給客戶端。相對(duì)于異步復(fù)制,半同步復(fù)制提高了數(shù)據(jù)的安全性,同時(shí)它也造成了一個(gè)TCP/IP往返耗時(shí)的延遲。

主庫(kù)配置sync_binlog=1,innodb_flush_log_at_trx_commit=1 sync_binlog的默認(rèn)值是0,MySQL不會(huì)將binlog同步到磁盤,其值表示每寫多少binlog同步一次磁盤。

innodb_flush_log_at_trx_commit為1表示每一次事務(wù)提交或事務(wù)外的指令都需要把日志flush到磁盤。

注意:將以上兩個(gè)值同時(shí)設(shè)置為1時(shí),寫入性能會(huì)受到一定限制,只有對(duì)數(shù)據(jù)安全性要求很高的場(chǎng)景才建議使用,比如涉及到錢的訂單支付業(yè)務(wù),而且系統(tǒng)I/O能力必須可以支撐!

4.1 解決從庫(kù)復(fù)制延遲的問(wèn)題:

架構(gòu)方面

  • 業(yè)務(wù)的持久化層的實(shí)現(xiàn)采用分庫(kù)架構(gòu),mysql服務(wù)可平行擴(kuò)展,分散壓力。
  • 單個(gè)庫(kù)讀寫分離,一主多從,主寫從讀,分散壓力。這樣從庫(kù)壓力比主庫(kù)高,保護(hù)主庫(kù)。
  • 服務(wù)的基礎(chǔ)架構(gòu)在業(yè)務(wù)和mysql之間加入memcache或者redis的cache層。降低mysql的讀壓力。
  • 不同業(yè)務(wù)的mysql物理上放在不同機(jī)器,分散壓力。
  • 使用比主庫(kù)更好的硬件設(shè)備作為slave,mysql壓力小,延遲自然會(huì)變小。

硬件方面

  • 采用好服務(wù)器,比如4u比2u性能明顯好,2u比1u性能明顯好。
  • 存儲(chǔ)用ssd或者盤陣或者san,提升隨機(jī)寫的性能。
  • 主從間保證處在同一個(gè)交換機(jī)下面,并且是萬(wàn)兆環(huán)境。

總結(jié),硬件強(qiáng)勁,延遲自然會(huì)變小。一句話,縮小延遲的解決方案就是花錢和花時(shí)間。

mysql主從同步加速

  • sync_binlog在slave端設(shè)置為0
  • –logs-slave-updates 從服務(wù)器從主服務(wù)器接收到的更新不記入它的二進(jìn)制日志。
  • 直接禁用slave端的binlog
  • .slave端,如果使用的存儲(chǔ)引擎是innodb,innodb_flush_log_at_trx_commit =2

從文件系統(tǒng)本身屬性角度優(yōu)化

  • master端修改linux、Unix文件系統(tǒng)中文件的etime屬性, 由于每當(dāng)讀文件時(shí)OS都會(huì)將讀取操作發(fā)生的時(shí)間回寫到磁盤上,對(duì)于讀操作頻繁的數(shù)據(jù)庫(kù)文件來(lái)說(shuō)這是沒(méi)必要的,只會(huì)增加磁盤系統(tǒng)的負(fù)擔(dān)影響I/O性能。可以通過(guò)設(shè)置文件系統(tǒng)的mount屬性,組織操作系統(tǒng)寫atime信息,在linux上的操作為:打開(kāi)/etc/fstab,加上noatime參數(shù)/dev/sdb1 /data reiserfs noatime 1 2然后重新mount文件系統(tǒng)#mount -oremount /data
  • 同步參數(shù)調(diào)整主庫(kù)是寫,對(duì)數(shù)據(jù)安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設(shè)置是需要的而slave則不需要這么高的數(shù)據(jù)安全,完全可以講sync_binlog設(shè)置為0或者關(guān)閉binlog,innodb_flushlog也可以設(shè)置為0來(lái)提高sql的執(zhí)行效率

4.2 MySql數(shù)據(jù)庫(kù)從庫(kù)同步其他問(wèn)題及解決方案

mysql主從復(fù)制存在的問(wèn)題:

  • 主庫(kù)宕機(jī)后,數(shù)據(jù)可能丟失
  • 從庫(kù)只有一個(gè)sql Thread,主庫(kù)寫壓力大,復(fù)制很可能延時(shí)

解決方法:

  • 半同步復(fù)制—解決數(shù)據(jù)丟失的問(wèn)題
  • 并行復(fù)制----解決從庫(kù)復(fù)制延遲的問(wèn)題

半同步復(fù)制mysql semi-sync(半同步復(fù)制)半同步復(fù)制:

  • 5.5集成到mysql,以插件的形式存在,需要單獨(dú)安裝
  • 確保事務(wù)提交后binlog至少傳輸?shù)揭粋€(gè)從庫(kù)
  • 不保證從庫(kù)應(yīng)用完這個(gè)事務(wù)的binlog
  • 性能有一定的降低,響應(yīng)時(shí)間會(huì)更長(zhǎng)
  • 網(wǎng)絡(luò)異?;驈膸?kù)宕機(jī),卡主主庫(kù),直到超時(shí)或從庫(kù)恢復(fù)

主從復(fù)制–異步復(fù)制原理、半同步復(fù)制和并行復(fù)制原理比較

到此這篇關(guān)于MySQL主從同步延遲原因與解決方案的文章就介紹到這了,更多相關(guān)MySQL主從同步延遲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • MySQL由淺入深掌握連接查詢

    MySQL由淺入深掌握連接查詢

    連接查詢是關(guān)系數(shù)據(jù)庫(kù)中最主要的查詢,主要包括內(nèi)連接、外連接和交叉連接等。通過(guò)連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志
    2022-03-03
  • mysql 5.7.15版本安裝配置方法圖文教程

    mysql 5.7.15版本安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.15安裝配置方法圖文教程,更改數(shù)據(jù)庫(kù)data的存儲(chǔ)路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Ubuntu 18.04 安裝mysql5.7

    Ubuntu 18.04 安裝mysql5.7

    這篇文章主要為大家詳細(xì)介紹了Ubuntu 18.04 安裝mysql 5.7的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 解決“無(wú)法啟動(dòng)mysql服務(wù) 錯(cuò)誤1069”的方法

    解決“無(wú)法啟動(dòng)mysql服務(wù) 錯(cuò)誤1069”的方法

    本文給大家分享的是小編解決自己網(wǎng)站無(wú)法連接數(shù)據(jù)庫(kù)的時(shí)候遇到的“無(wú)法啟動(dòng)mysql服務(wù) 錯(cuò)誤1069”的方案,有相同需求的小伙伴可以參考下
    2017-08-08
  • 低版本Druid連接池+MySQL驅(qū)動(dòng)8.0導(dǎo)致線程阻塞、性能受限

    低版本Druid連接池+MySQL驅(qū)動(dòng)8.0導(dǎo)致線程阻塞、性能受限

    應(yīng)用升級(jí)MySQL驅(qū)動(dòng)8.0后,在并發(fā)量較高時(shí),查看監(jiān)控打點(diǎn),Druid連接池拿到連接并執(zhí)行SQL的時(shí)間大部分都超過(guò)200ms,本文就解決一下這個(gè)問(wèn)題
    2021-07-07
  • MySQL下高可用故障轉(zhuǎn)移方案MHA的超級(jí)部署教程

    MySQL下高可用故障轉(zhuǎn)移方案MHA的超級(jí)部署教程

    這篇文章主要介紹了MySQL下高可用故障切換方案MHA的超級(jí)部署教程,文中隊(duì)MHA方案的一些特點(diǎn)做了介紹,示例基于Linux系統(tǒng)的服務(wù)器環(huán)境,需要的朋友可以參考下
    2015-12-12
  • MLSQL編譯時(shí)權(quán)限控制示例詳解

    MLSQL編譯時(shí)權(quán)限控制示例詳解

    這篇文章主要給大家介紹了關(guān)于MLSQL編譯時(shí)權(quán)限控制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 淺談MySQL之淺入深出頁(yè)原理

    淺談MySQL之淺入深出頁(yè)原理

    首先,我們需要知道,頁(yè)(Pages)是InnoDB中管理數(shù)據(jù)的最小單元。Buffer Pool中存的就是一頁(yè)一頁(yè)的數(shù)據(jù)。當(dāng)我們要查詢的數(shù)據(jù)不在Buffer Pool中時(shí),InnoDB會(huì)將記錄所在的頁(yè)整個(gè)加載到Buffer Pool中去;同樣,將Buffer Pool中的臟頁(yè)刷入磁盤時(shí),也是按照頁(yè)為單位刷入磁盤的
    2021-06-06
  • MySQL將查詢結(jié)果用英文逗號(hào),連接的實(shí)現(xiàn)方式

    MySQL將查詢結(jié)果用英文逗號(hào),連接的實(shí)現(xiàn)方式

    這篇文章主要介紹了MySQL將查詢結(jié)果用英文逗號(hào),連接的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • mysql 新增、刪除用戶和權(quán)限分配

    mysql 新增、刪除用戶和權(quán)限分配

    這篇文章主要為大家演示下如果通過(guò)命令行實(shí)現(xiàn)mysql的新建用戶、刪除用戶和權(quán)限分配,需要的朋友可以參考下
    2013-10-10

最新評(píng)論