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

mysql半同步復(fù)制的項(xiàng)目實(shí)踐

 更新時間:2025年11月26日 09:52:19   作者:埃澤漫筆  
本文主要介紹了mysql半同步復(fù)制的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

題目詳細(xì)答案

工作流程

(1)從庫會在連接到主庫時告訴主庫,它是不是配置了半同步。

(2)如果半同步復(fù)制在主庫端開啟,并且至少有一個半同步復(fù)制的從庫節(jié)點(diǎn),那么此時主庫的事務(wù)線程在提交時會被阻塞并等待,結(jié)果有兩種可能:

(a)至少一個從庫節(jié)點(diǎn)通知它已經(jīng)收到了所有這個事務(wù)的Binlog事件;

(b)一直等待直到超過配置的某一個時間點(diǎn)為止,此時,半同步復(fù)制將自動關(guān)閉,轉(zhuǎn)換為異步復(fù)制。

(3)從庫節(jié)點(diǎn)只有在接收到某一個事務(wù)的所有 Binlog,將其寫入到 Relay Log 文件之后,才會通知對應(yīng)主庫上面的等待線程。

(4)如果在等待過程中,等待時間已經(jīng)超過了配置的超時時間,沒有任何一個從節(jié)點(diǎn)通知當(dāng)前事務(wù),那么此時主庫會自動轉(zhuǎn)換為異步復(fù)制,當(dāng)至少一個半同步從節(jié)點(diǎn)趕上來時,主庫便會自動轉(zhuǎn)換為半同步方式的復(fù)制。

(5)半同步復(fù)制必須是在主庫和從庫兩端都開啟時才行,如果在主庫上沒打開,或者在主庫上開啟了而在從庫上沒有開啟,主庫都會使用異步方式復(fù)制。

配置半同步復(fù)制

在主服務(wù)器上

安裝半同步復(fù)制插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

啟用半同步復(fù)制

SET GLOBAL rpl_semi_sync_master_enabled = 1;

設(shè)置超時時間(可選)

SET GLOBAL rpl_semi_sync_master_timeout = 10000; -- 單位為毫秒

在從服務(wù)器上

安裝半同步復(fù)制插件

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

啟用半同步復(fù)制

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

檢查半同步復(fù)制狀態(tài)

在主服務(wù)器上

SHOW STATUS LIKE 'Rpl_semi_sync%';

在從服務(wù)器上

SHOW STATUS LIKE 'Rpl_semi_sync%';

MySQL 半同步復(fù)制(Semi-Sync Replication):工作流程與配置實(shí)戰(zhàn)

半同步復(fù)制是 MySQL 中平衡數(shù)據(jù)安全性與性能的核心復(fù)制模式,它在異步復(fù)制的基礎(chǔ)上增加了 “主庫等待從庫確認(rèn)” 的機(jī)制,既避免了全同步的性能損耗,又降低了異步復(fù)制的數(shù)據(jù)丟失風(fēng)險。本文將詳細(xì)解析其工作流程、配置步驟及狀態(tài)檢查方法,幫助你快速落地半同步復(fù)制架構(gòu)。

一、半同步復(fù)制的核心工作流程

半同步復(fù)制的核心邏輯是 “主庫提交事務(wù)前,等待至少一個從庫確認(rèn)接收日志”,具體流程可拆解為 5 個關(guān)鍵步驟:

1. 初始化協(xié)商:主從確認(rèn)復(fù)制模式

  • 從庫啟動時,會通過復(fù)制連接向主庫發(fā)送 “是否支持半同步” 的標(biāo)識;
  • 主庫檢查自身半同步配置(rpl_semi_sync_master_enabled),若啟用,則與從庫協(xié)商使用半同步模式;
  • 關(guān)鍵點(diǎn):僅當(dāng)主庫和從庫同時啟用半同步時,才會進(jìn)入半同步流程,否則自動降級為異步復(fù)制。

2. 主庫事務(wù)提交與阻塞等待

  • 主庫執(zhí)行事務(wù)(如 UPDATE/INSERT),完成本地操作(寫入 binlog、InnoDB 引擎提交)后,不會立即向客戶端返回成功;
  • 主庫的事務(wù)線程進(jìn)入阻塞狀態(tài),等待至少一個從庫的 “日志接收確認(rèn)”;
  • 等待結(jié)果有兩種可能:
    • (a)超時前收到確認(rèn):至少一個從庫返回 “已接收并寫入中繼日志(relay log)”,主庫立即完成提交并向客戶端返回 “成功”;
    • (b)超時未收到確認(rèn):等待時間超過 rpl_semi_sync_master_timeout(默認(rèn) 10 秒),主庫自動切換為異步復(fù)制,向客戶端返回 “成功”(此時存在數(shù)據(jù)丟失風(fēng)險)。

3. 從庫接收日志并返回確認(rèn)

  • 從庫的 I/O 線程持續(xù)接收主庫發(fā)送的 binlog 日志;
  • 當(dāng)從庫接收到完整的事務(wù) binlog 并寫入本地中繼日志后,向主庫返回 “ACK 確認(rèn)”(告知主庫 “日志已安全存儲”);
  • 注意:從庫僅確認(rèn) “收到日志”,無需等待事務(wù)應(yīng)用到數(shù)據(jù)(即無需 SQL 線程執(zhí)行),這是半同步與全同步的核心區(qū)別(全同步需等待應(yīng)用完成)。

4. 主庫復(fù)制模式的動態(tài)切換

  • 若主庫因超時而切換為異步復(fù)制后,當(dāng)有從庫重新追上并正常返回確認(rèn)時,主庫會自動切回半同步模式
  • 切換過程對應(yīng)用透明,無需人工干預(yù),保證了復(fù)制模式的靈活性。

5. 異常場景處理

  • 若從庫宕機(jī)或網(wǎng)絡(luò)中斷,主庫在等待超時后切換為異步,避免事務(wù)長期阻塞;
  • 若主庫宕機(jī),已收到確認(rèn)的從庫必然保存了最新日志,可作為新主庫(數(shù)據(jù)丟失風(fēng)險極低)。

二、半同步復(fù)制的配置步驟

環(huán)境準(zhǔn)備

  • 主庫:MySQL 5.7+(支持半同步插件),已配置基本主從(參考前文主從同步配置);
  • 從庫:與主庫版本一致,已通過異步復(fù)制連接主庫。

步驟 1:主庫配置半同步

  1. 安裝半同步主庫插件
    半同步功能通過插件實(shí)現(xiàn),需先安裝:
-- 登錄主庫
mysql -u root -p
 
-- 安裝插件(Linux 系統(tǒng),Windows 為 semisync_master.dll)
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

若提示 “Plugin already installed”,說明已安裝,可跳過。

  1. 啟用半同步復(fù)制
-- 臨時啟用(重啟失效)
SET GLOBAL rpl_semi_sync_master_enabled = 1;
 
-- 永久啟用(需修改 my.cnf,重啟生效)
[mysqld]
rpl_semi_sync_master_enabled = 1
  1. 配置超時時間(可選)
    設(shè)置主庫等待從庫確認(rèn)的超時時間(默認(rèn) 10000 毫秒 = 10 秒):
-- 臨時設(shè)置為 5 秒
SET GLOBAL rpl_semi_sync_master_timeout = 5000;
 
-- 永久設(shè)置(my.cnf)
[mysqld]
rpl_semi_sync_master_timeout = 5000

步驟 2:從庫配置半同步

  1. 安裝半同步從庫插件
-- 登錄從庫
mysql -u root -p
 
-- 安裝插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  1. 啟用半同步復(fù)制
-- 臨時啟用
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
 
-- 永久啟用(my.cnf)
[mysqld]
rpl_semi_sync_slave_enabled = 1
  1. 重啟從庫 I/O 線程
    使半同步配置生效(無需重啟數(shù)據(jù)庫):
STOP SLAVE IO_THREAD;  -- 停止 I/O 線程
START SLAVE IO_THREAD; -- 重啟 I/O 線程

三、檢查半同步復(fù)制狀態(tài)

配置完成后,需驗(yàn)證半同步是否正常工作,關(guān)鍵通過 SHOW STATUS 查看狀態(tài)變量。

主庫狀態(tài)檢查

SHOW STATUS LIKE 'Rpl_semi_sync%';

核心字段說明:

  • Rpl_semi_sync_master_enabled:1 表示主庫半同步已啟用;
  • Rpl_semi_sync_master_status:1 表示當(dāng)前處于半同步模式(0 表示異步);
  • Rpl_semi_sync_master_yes_tx:成功通過半同步提交的事務(wù)數(shù);
  • Rpl_semi_sync_master_no_tx:因超時或異常降級為異步的事務(wù)數(shù)(若持續(xù)增長,需排查從庫或網(wǎng)絡(luò)問題)。

從庫狀態(tài)檢查

SHOW STATUS LIKE 'Rpl_semi_sync%';

核心字段說明:

  • Rpl_semi_sync_slave_enabled:1 表示從庫半同步已啟用;
  • Rpl_semi_sync_slave_status:1 表示當(dāng)前從庫參與半同步(0 表示未參與);
  • Rpl_semi_sync_slave_send_ack:從庫向主庫發(fā)送的 ACK 確認(rèn)次數(shù)(應(yīng)隨事務(wù)增長)。

四、常見問題與注意事項(xiàng)

  1. 配置后仍為異步模式?
    • 檢查主從庫是否同時啟用插件(rpl_semi_sync_*_enabled 均為 1);
    • 從庫 I/O 線程是否重啟(需執(zhí)行 STOP/START SLAVE IO_THREAD);
    • 主庫是否有至少一個半同步從庫(Rpl_semi_sync_master_clients 應(yīng) ≥ 1)。
  1. 主庫寫入延遲增加?
    半同步會增加主庫等待時間(通常 10-100ms),若延遲過大:
    • 檢查主從庫網(wǎng)絡(luò)延遲(建議同一機(jī)房,延遲 < 10ms);
    • 適當(dāng)調(diào)小超時時間(如 5 秒),避免長期阻塞。
  1. 從庫 ACK 確認(rèn)不及時?
    從庫接收日志慢可能是磁盤 I/O 瓶頸,建議從庫使用 SSD 存儲中繼日志。

五、總結(jié)

半同步復(fù)制通過 “主庫等待至少一個從庫確認(rèn)日志接收” 的機(jī)制,在性能與數(shù)據(jù)安全間取得了平衡,是生產(chǎn)環(huán)境核心業(yè)務(wù)的首選復(fù)制模式。其配置關(guān)鍵點(diǎn)包括:

  • 主從庫同時安裝并啟用半同步插件;
  • 合理設(shè)置超時時間(根據(jù)網(wǎng)絡(luò)延遲調(diào)整);
  • 通過狀態(tài)變量監(jiān)控同步模式和確認(rèn)次數(shù)。

相比異步復(fù)制,半同步以微小的性能損耗(額外 10-100ms 延遲)顯著降低了數(shù)據(jù)丟失風(fēng)險;相比全同步,它又避免了因等待所有從庫導(dǎo)致的性能災(zāi)難。

到此這篇關(guān)于mysql半同步復(fù)制的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)mysql半同步復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL多條件查詢的實(shí)現(xiàn)示例

    MySQL多條件查詢的實(shí)現(xiàn)示例

    本文主要介紹了MySQL多條件查詢的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • mysql數(shù)據(jù)庫開發(fā)規(guī)范【推薦】

    mysql數(shù)據(jù)庫開發(fā)規(guī)范【推薦】

    這篇文章主要介紹了mysql數(shù)據(jù)庫開發(fā)規(guī)范的相關(guān)內(nèi)容,還是十分不錯的,這里給大家分享下,需要的朋友可以參考。
    2017-10-10
  • MySQL 5.7.30 安裝與升級問題詳細(xì)教程

    MySQL 5.7.30 安裝與升級問題詳細(xì)教程

    這篇文章主要介紹了MySQL 5.7.30 的安裝與升級教程(所有可能的坑都在這里),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • mysql 使用B+樹索引有哪些優(yōu)勢

    mysql 使用B+樹索引有哪些優(yōu)勢

    這篇文章主要介紹了mysql 使用B+樹索引有哪些優(yōu)勢,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01
  • MySQL可重復(fù)讀隔離級別下開啟事務(wù)的問題解決

    MySQL可重復(fù)讀隔離級別下開啟事務(wù)的問題解決

    本文主要介紹了MySQL可重復(fù)讀隔離級別下開啟事務(wù)的問題解決,詳解在Repeatable?Read隔離級別下,mysql的快照生成時機(jī)的問題,感興趣的可以了解一下
    2024-07-07
  • MySQL聚合查詢COUNT、SUM、AVG用法實(shí)戰(zhàn)案例指南

    MySQL聚合查詢COUNT、SUM、AVG用法實(shí)戰(zhàn)案例指南

    本文主要講述了MySQL中最常用的聚合函數(shù):COUNT、SUM、AVG的用法、場景和避免誤區(qū)的方法,通過實(shí)戰(zhàn)案例深入剖析了每個函數(shù)的適用場景和注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • mysql缺少my.ini文件的解決方法

    mysql缺少my.ini文件的解決方法

    使用的這么長時間的mysql,有一天我突然需要使用mysql?的配置文件my.ini時發(fā)現(xiàn)沒有這個文件并且這個文件不是被隱藏了,所以本文給大家介紹了mysql缺少my.ini文件的解決方法,需要的朋友可以參考下
    2023-12-12
  • mysql中Update未加索引導(dǎo)致的微服務(wù)模塊不可用

    mysql中Update未加索引導(dǎo)致的微服務(wù)模塊不可用

    本文主要介紹了mysql中Update未加索引導(dǎo)致的微服務(wù)模塊不可用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • mysql記錄耗時的sql實(shí)例詳解

    mysql記錄耗時的sql實(shí)例詳解

    這篇文章主要介紹了mysql記錄耗時的sql實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)方法,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • MySQL 4.0 升級到mysql 5.0的方法

    MySQL 4.0 升級到mysql 5.0的方法

    需要從4.0直接升級到5.0,查看了一下changelog,發(fā)現(xiàn)主要有以下變化,需要升級mysql的朋友可以參考下。
    2011-02-02

最新評論

策勒县| 鄂托克前旗| 新和县| 恩施市| 林周县| 临汾市| 逊克县| 甘泉县| 静安区| 莱西市| 崇明县| 丰台区| 雷州市| 商都县| 屏山县| 新沂市| 云安县| 堆龙德庆县| 阿城市| 高唐县| 永善县| 九江县| 江安县| 遂溪县| 大丰市| 准格尔旗| 利津县| 将乐县| 贵溪市| 木兰县| 体育| 伊川县| 寻甸| 闻喜县| 含山县| 龙州县| 安塞县| 衡山县| 锦州市| 克拉玛依市| 扎鲁特旗|