日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

怎样解决MySQL数据库主从复制延迟的问题?

發(fā)布時(shí)間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎样解决MySQL数据库主从复制延迟的问题? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


1.網(wǎng)絡(luò)超時(shí)

2.慢查詢

3.流量

問題一:主庫的從庫太多,導(dǎo)致復(fù)制延遲
從庫數(shù)據(jù)以3-5個為宜,要復(fù)制的從節(jié)點(diǎn)數(shù)量過多,會導(dǎo)致復(fù)制延遲
問題二:從庫硬件比主庫差,導(dǎo)致復(fù)制延遲
查看Master和Slave的系統(tǒng)配置,可能會因?yàn)闄C(jī)器配置不當(dāng),包括磁盤I/O、CPU、內(nèi)存等各方面因素造成復(fù)制的延遲。一般發(fā)生在高并發(fā)大數(shù)據(jù)量寫入場景中
問題三:慢SQL語句過多
假如一條SQL語句執(zhí)行時(shí)間是20秒,那么從執(zhí)行完畢到從庫上能查到數(shù)據(jù)至少需要20秒,這樣就延遲20秒了。
一般要把SQL語句的優(yōu)化作為常規(guī)工作不斷地進(jìn)行監(jiān)控和優(yōu)化,如果單個SQL的寫入時(shí)間長,可以修改后分多次寫入。通過查看慢查詢?nèi)罩净騭how full processlist命令,找出執(zhí)行時(shí)間長的查詢語句或大的事務(wù)
問題四:主從復(fù)制的設(shè)計(jì)問題
例如主從復(fù)制單線程,如果主庫寫并發(fā)太大,來不及傳送到從庫,就會導(dǎo)致延遲。更高版本的MySQL可以支持多線程復(fù)制,門戶網(wǎng)站則會開發(fā)自己的多線程同步功能。
問題五:主從庫之間的網(wǎng)絡(luò)延遲
主從庫的網(wǎng)卡、網(wǎng)線、交換機(jī)等網(wǎng)絡(luò)設(shè)備都可能成為復(fù)制的瓶頸,導(dǎo)致復(fù)制延遲。另外,跨公網(wǎng)的主從復(fù)制很容易導(dǎo)致主從復(fù)制延遲
問題六:主庫讀寫壓力大,導(dǎo)致復(fù)制延遲
架構(gòu)的前端要加buffer及緩存層

?

1.MySQL數(shù)據(jù)庫主從同步延遲原理。

答:談到mysql數(shù)據(jù)庫主從同步延遲原理,得從mysql的數(shù)據(jù)庫主從復(fù)制原理說起,mysql的主從復(fù)制都是單線程的操作,主庫對所有DDL和DML產(chǎn)生binlog,binlog是順序?qū)?#xff0c;所以效率很高;slave的Slave_IO_Running線程會到主庫取日志,效率會比較高,slave的Slave_SQL_Running線程將主庫的DDL和DML操作都在slave實(shí)施。DML和DDL的IO操作是隨機(jī)的,不是順序的,因此成本會很高,還可能是slave上的其他查詢產(chǎn)生lock爭用,由于Slave_SQL_Running也是單線程的,所以一個DDL卡主了,需要執(zhí)行10分鐘,那么所有之后的DDL會等待這個DDL執(zhí)行完才會繼續(xù)執(zhí)行,這就導(dǎo)致了延時(shí)。有朋友會問:“主庫上那個相同的DDL也需要執(zhí)行10分,為什么slave會延時(shí)?”,答案是master可以并發(fā),Slave_SQL_Running線程卻不可以。

2.MySQL數(shù)據(jù)庫主從同步延遲是怎么產(chǎn)生的。

答:當(dāng)主庫的TPS并發(fā)較高時(shí),產(chǎn)生的DDL數(shù)量超過slave一個sql線程所能承受的范圍,那么延時(shí)就產(chǎn)生了,當(dāng)然還有就是可能與slave的大型query語句產(chǎn)生了鎖等待。

3.MySQL數(shù)據(jù)庫主從同步延遲解決方案

答:最簡單的減少slave同步延時(shí)的方案就是在架構(gòu)上做優(yōu)化,盡量讓主庫的DDL快速執(zhí)行。還有就是主庫是寫,對數(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來提高sql的執(zhí)行效率。另外就是使用比主庫更好的硬件設(shè)備作為slave。

4.MySQL數(shù)據(jù)庫主從同步延遲產(chǎn)生的因素。

1. 網(wǎng)絡(luò)延遲
2. master負(fù)載
3. slave負(fù)載
一般的做法是,使用多臺slave來分?jǐn)傋x請求,再從這些slave中取一臺專用的服務(wù)器,只作為備份用,不進(jìn)行其他任何操作,就能相對最大限度地達(dá)到’實(shí)時(shí)’的要求了

另外,再介紹2個可以減少延遲的參數(shù)
–slave-net-timeout=seconds
參數(shù)含義:當(dāng)slave從主數(shù)據(jù)庫讀取log數(shù)據(jù)失敗后,等待多久重新建立連接并獲取數(shù)據(jù)
slave_net_timeout單位為秒 默認(rèn)設(shè)置為 3600秒
| slave_net_timeout | 3600
–master-connect-retry=seconds
參數(shù)含義:當(dāng)重新建立主從連接時(shí),如果連接建立失敗,間隔多久后重試。
master-connect-retry單位為秒 默認(rèn)設(shè)置為 60秒
通常配置以上2個參數(shù)可以減少網(wǎng)絡(luò)問題導(dǎo)致的主從數(shù)據(jù)同步延遲

轉(zhuǎn)載于:https://www.cnblogs.com/hanling/p/7215354.html

總結(jié)

以上是生活随笔為你收集整理的怎样解决MySQL数据库主从复制延迟的问题?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。