MySQL復(fù)制三種模式:同步、異步、半同步復(fù)制有什么區(qū)別?
作為數(shù)據(jù)庫(kù)領(lǐng)域的"快遞小哥",MySQL復(fù)制技術(shù)承擔(dān)著數(shù)據(jù)運(yùn)輸?shù)闹厝巍=裉煳覀兙蛠砹牧倪@個(gè)數(shù)據(jù)世界的"快遞服務(wù)"——同步復(fù)制、異步復(fù)制、半同步復(fù)制到底有什么區(qū)別?為什么金融系統(tǒng)必須用半同步?電商大促時(shí)又該如何選擇?讓我們用最接地氣的方式揭開這些復(fù)制技術(shù)的神秘面紗。
快遞服務(wù)大比拼:三種復(fù)制模式本質(zhì)解析
1. 異步復(fù)制(Asynchronous Replication) - 佛系快遞小哥
# 經(jīng)典配置示例 CHANGE MASTER TO MASTER_HOST='master1.example.com', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1;
工作原理:
主庫(kù)寫完本地Binlog就立即返回,從庫(kù)異步拉取數(shù)據(jù),就像快遞小哥收件后不保證何時(shí)送達(dá)。這是MySQL默認(rèn)的復(fù)制方式。
典型場(chǎng)景:
- 跨機(jī)房災(zāi)備(北京主庫(kù) -> 上海從庫(kù))
- 數(shù)據(jù)分析從庫(kù)(允許短暫延遲)
- 讀寫分離的非核心業(yè)務(wù)查詢
2. 同步復(fù)制(Synchronous Replication) - 強(qiáng)迫癥快遞員
工作原理:
必須等待所有從庫(kù)確認(rèn)收到數(shù)據(jù)后,主庫(kù)才向客戶端返回成功,相當(dāng)于快遞必須當(dāng)面簽收才算完成。
硬核代價(jià):
- 某銀行系統(tǒng)實(shí)測(cè):同步復(fù)制導(dǎo)致寫操作延遲增加30ms
- 任一從庫(kù)故障都會(huì)導(dǎo)致整個(gè)集群不可寫
- 網(wǎng)絡(luò)抖動(dòng)直接引發(fā)服務(wù)中斷
適用場(chǎng)景:
- 金融核心交易系統(tǒng)(資金劃轉(zhuǎn)、證券交易)
- 政府機(jī)密數(shù)據(jù)存儲(chǔ)
- 需要強(qiáng)一致性的分布式系統(tǒng)
3. 半同步復(fù)制(Semisynchronous Replication) - 折中主義快遞站
# 半同步配置步驟(MySQL 8.0+) INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; SET GLOBAL rpl_semi_sync_master_enabled=1; SET GLOBAL rpl_semi_sync_master_timeout=1000; # 超時(shí)1秒后降級(jí)
運(yùn)行機(jī)制:
主庫(kù)提交事務(wù)時(shí),至少有一個(gè)從庫(kù)確認(rèn)收到Binlog事件即返回成功,相當(dāng)于快遞網(wǎng)點(diǎn)確認(rèn)已攬件(但未派送)。
實(shí)戰(zhàn)數(shù)據(jù):
- 主從延遲控制在100ms以內(nèi)
- 故障切換時(shí)數(shù)據(jù)丟失窗口<1秒
- 寫性能損失約15%(相比異步復(fù)制)
經(jīng)典應(yīng)用:
- 電商訂單系統(tǒng)
- 游戲玩家數(shù)據(jù)存儲(chǔ)
- 物聯(lián)網(wǎng)設(shè)備狀態(tài)上報(bào)
參數(shù)調(diào)優(yōu)實(shí)戰(zhàn):讓復(fù)制效率提升300%的秘籍
1. 異步復(fù)制加速方案
# 優(yōu)化并行復(fù)制(MySQL 8.0默認(rèn)開啟) slave_parallel_workers=8 slave_preserve_commit_order=1 # 調(diào)整日志刷新策略 sync_binlog=1000 innodb_flush_log_at_trx_commit=2
效果對(duì)比:
某直播平臺(tái)優(yōu)化后,從庫(kù)延遲從5分鐘降至10秒內(nèi),數(shù)據(jù)吞吐量提升3倍。
2. 半同步復(fù)制保命配置
# 防止網(wǎng)絡(luò)抖動(dòng)導(dǎo)致服務(wù)中斷 rpl_semi_sync_master_timeout=500 # 超時(shí)500ms自動(dòng)降級(jí)為異步 # 啟用無損半同步(MySQL 8.0新特性) rpl_semi_sync_master_wait_point=AFTER_SYNC
高可用架構(gòu)中的復(fù)制選擇策略
1. 黃金組合方案
場(chǎng)景
推薦方案
配套工具
跨城災(zāi)備
異步復(fù)制 + 延遲復(fù)制
Percona XtraBackup
同城雙活
半同步復(fù)制 + MHA
MySQL Router
金融核心系統(tǒng)
同步復(fù)制 + InnoDB Cluster
Consul服務(wù)發(fā)現(xiàn)
終極拷問:到底該怎么選?
- 追求性能選異步:適合日志采集、大數(shù)據(jù)分析等場(chǎng)景
- 優(yōu)勢(shì):吞吐量高(可達(dá)10萬TPS)
- 風(fēng)險(xiǎn):故障時(shí)可能丟失數(shù)分鐘數(shù)據(jù)
- 要安全又要性能選半同步:電商、社交等互聯(lián)網(wǎng)業(yè)務(wù)首選
- 平衡點(diǎn):RPO(恢復(fù)點(diǎn)目標(biāo))<1秒,RTO(恢復(fù)時(shí)間)<30秒
- 成本:需要至少兩個(gè)從庫(kù)
- 強(qiáng)一致性需求選同步:金融、政務(wù)等關(guān)鍵領(lǐng)域
- 代價(jià):需要專線網(wǎng)絡(luò)(延遲<2ms)
- 部署:至少3節(jié)點(diǎn)集群
結(jié)語
選擇復(fù)制策略就像挑選快遞服務(wù):
- 普通包裹用異步(便宜但可能延遲)
- 重要文件用半同步(加急保價(jià))
- 機(jī)密檔案必須同步(武裝押運(yùn))
建議所有生產(chǎn)系統(tǒng)至少配置半同步復(fù)制+異步從庫(kù)的雙保險(xiǎn)架構(gòu)。記住,沒有最好的復(fù)制方式,只有最適合業(yè)務(wù)場(chǎng)景的選擇。下次設(shè)計(jì)系統(tǒng)時(shí),不妨先問問自己:這個(gè)業(yè)務(wù)場(chǎng)景能承受多少數(shù)據(jù)丟失?
到此這篇關(guān)于MySQL復(fù)制三種模式:同步、異步、半同步復(fù)制有什么區(qū)別?的文章就介紹到這了,更多相關(guān)MySQL同步、異步、半同步復(fù)制的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_
這篇文章主要介紹了MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05MySQL中執(zhí)行計(jì)劃explain命令示例詳解
這篇文章主要給大家介紹了關(guān)于MySQL中執(zhí)行計(jì)劃explain命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用explain命令具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面說來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05Mysql實(shí)現(xiàn)模糊查詢的兩種方式(like子句?、正則表達(dá)式)
通配符是一種特殊語句,主要用來模糊查詢,下面這篇文章主要給大家介紹了關(guān)于給Mysql實(shí)現(xiàn)模糊查詢的兩種方式,分別是like子句?、正則表達(dá)式,需要的朋友可以參考下2022-09-09MySQL主從同步機(jī)制與同步延時(shí)問題追查過程
這篇文章主要給大家介紹了關(guān)于MySQL主從同步機(jī)制與同步延時(shí)問題追查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02mysql Access denied for user ‘root’@’localhost’ (using passw
這篇文章主要介紹了mysql Access denied for user ‘root’@’localhost’ (using password: YES)解決方法,本文給出詳細(xì)的解決步驟及操作注釋,需要的朋友可以參考下2015-07-07MySQL 服務(wù)器參數(shù)說明及查看 設(shè)置方法
MySQL 服務(wù)器參數(shù)說明及查看,設(shè)置方法,對(duì)于mysql不是很熟悉的朋友,可以參考下。2009-03-03