詳解如何解決Mysql主從復制延遲

???????解決 MySQL 主從復制延遲需要從架構設計、參數調優、硬件優化等多維度綜合處理。

一、根本原因分析

主從延遲的本質是:從庫的 SQL 線程重放速度 < 主庫的寫入速度????????

常見瓶頸點

  • 單線程回放(MySQL 5.6 前)

  • 從庫硬件配置低(CPU/磁盤/網絡)

  • 大事務/無主鍵寫入

  • 跨網絡傳輸抖動

二、八大解決方案及操作步驟

方案 1:啟用多線程復制(MTS)

適用版本:MySQL 5.6+
原理:并行回放不同數據庫的事務

-- 查看當前配置
SHOW VARIABLES LIKE 'slave_parallel_type';  -- 需為 DATABASE
SHOW VARIABLES LIKE 'slave_parallel_workers';-- 動態設置(建議值為 CPU 核數的 2-4 倍)
STOP SLAVE;
SET GLOBAL slave_parallel_workers = 8;
START SLAVE;

效果:提升 300% 以上的回放速度(需多庫寫入場景)

方案 2:升級到 MySQL 8.0 的 WRITESET 并行復制

核心優勢事務級并行(不依賴庫拆分)

-- 主庫配置
[mysqld]
binlog_transaction_dependency_tracking = WRITESET
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 16-- 從庫重啟生效

性能對比:比庫級并行快 5-10 倍,TPS 提升 80%+

方案 3:硬件優化(關鍵!)

組件優化方向具體操作
磁盤使用 NVMe SSD替換 SATA SSD/HDD
CPU主從庫配置對稱從庫 CPU 不低于主庫
網絡內網萬兆互聯主從同機房 ≤ 0.1ms 延遲
內存保證熱數據在內存設置?innodb_buffer_pool_size = 機器內存的 80%

方案 4:避免大事務

問題事務特征

-- 危險操作(刪除 1 億行數據)
DELETE FROM logs WHERE create_time < '2020-01-01';

?優化方案

  • 分批操作

    WHILE (受影響行數 > 0) DODELETE FROM logs WHERE create_time < '2020-01-01' LIMIT 1000;COMMIT;
    END WHILE
  • 業務設計:歸檔歷史數據到 ClickHouse 等列存數據庫

方案 5:強制主鍵設計?

無主鍵表的災難

  • 從庫全表掃描更新

  • 行鎖升級為表鎖

解決方案

-- 檢查無主鍵表
SELECT tables.table_schema, tables.table_name
FROM information_schema.tables
LEFT JOIN (SELECT table_schema, table_name FROM information_schema.statistics GROUP BY table_schema, table_name, index_nameHAVING SUM(CASE WHEN non_unique=0 AND nullable!='YES' THEN 1 ELSE 0 END)=COUNT(*)
) puks
ON tables.table_schema=puks.table_schema AND tables.table_name=puks.table_name
WHERE puks.table_name IS NULL
AND tables.table_schema NOT IN ('sys','mysql','information_schema','performance_schema');

方案 6:讀寫分離智能路由

架構設計

路由規則(以 ShardingSphere 為例):

rules:
- !READWRITE_SPLITTINGdataSources:main_ds:writeDataSourceName: masterreadDataSourceNames:- replica0- replica1loadBalancerName: random_weight# 關鍵配置:開啟事務內讀主庫transactionalReadQueryStrategy: PRIMARY# 讀請求延遲閾值queryConsistent: truemaxReplicaDelay: 500 # 單位毫秒

?方案 7:半同步復制(數據強一致)

原理:主庫提交前需收到至少一個從庫 ACK

-- 主庫安裝插件
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;  -- 超時降級為異步-- 從庫配置
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

代價:主庫寫入性能下降 20%-30%

方案 8:精細化監控與告警

關鍵監控指標

-- 查看延遲秒數(不精確!)
SHOW SLAVE STATUS\G
Seconds_Behind_Master: 0 -- 精確延遲檢測(推薦)
pt-heartbeat --user=monitor --password=*** \
--create-table --database heartbeat \
--update --interval=1 --daemonize-- 查詢真實延遲
SELECT TIMEDIFF(NOW(), ts) AS delay 
FROM heartbeat.heartbeat;

告警閾值

  • 警告:延遲 > 5 秒

  • 嚴重:延遲 > 30 秒

三、方案組合建議

場景推薦方案組合
電商讀多寫少MTS + 讀寫分離中間件 + NVMe SSD
金融交易系統半同步復制 + WRITESET + 心跳監控
日志分析從庫禁用復制延遲檢查 + 硬件資源隔離
云數據庫(RDS/Aurora)啟用代理讀寫分離 + 設置延遲閾值

四、極端情況應急方案

當延遲突然飆升時

  • 臨時切換讀主庫

    # 通過 ProxySQL 動態路由
    UPDATE mysql_query_rules SET destination_hostgroup=1 
    WHERE rule_id=2;  -- 原讀規則指向主庫組
    LOAD MYSQL QUERY RULES TO RUNTIME;
  • 跳過錯誤事務(慎用!):

    STOP SLAVE;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
    START SLAVE;
  • 重建從庫

    mysqldump --single-transaction --master-data=2 -A | mysql -h slave

五、預防性架構設計

通過以上策略組合,可徹底解決 99% 的主從復制延遲問題。

核心原則:并行化回放 + 硬件加速 + 業務規避

  • 分庫分表:減少單庫寫入壓力

  • TiDB 分布式數據庫:天然無主從延遲

  • 讀寫分離分級

    • 實時讀:走主庫

    • 非關鍵讀:走從庫(允許秒級延遲)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89690.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring之事務使用指南

Spring之事務使用指南一、事務的基礎概念1.1 什么是事務&#xff1f;1.2 事務的ACID特性1.3 Spring事務的核心優勢二、Spring事務的核心配置三、事務傳播行為&#xff08;Propagation&#xff09;3.1 常用傳播行為詳解3.1.1 REQUIRED&#xff08;默認值&#xff09;3.1.2 SUPPO…

基于FPGA的多級流水線加法器verilog實現,包含testbench測試文件

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.參考文獻 6.完整工程文件 1.課題概述 流水線&#xff08;Pipeline&#xff09;技術源于工業生產中的裝配線理念&#xff0c;在數字電路中&#xff0c;它將一個復雜運算任務分解為若干個子任務&#xff0c;每…

5.1.4習題精講

一、單項選擇題 01. 下列部件不屬于控制器的是&#xff08; C &#xff09;。 題目原文 下列部件不屬于控制器的是&#xff08; &#xff09;。 A. 指令寄存器 B. 程序計數器 C. 程序狀態字寄存器 D. 時序電路 正確答案&#xff1a;C 題目解析 考點分析&#xff1a; 本題考察CP…

華為云Flexus+DeepSeek征文|低代碼 × 強推理:華為云 Flexus 搭建可部署的 AI Agent 實踐方案【搭建寵物養護小知識AI助手】

文章目錄華為云FlexusDeepSeek征文&#xff5c;低代碼 強推理&#xff1a;華為云 Flexus 搭建可部署的 AI Agent 實踐方案【搭建寵物養護小知識AI助手】&#x1f680; 引言一、核心技術概覽1. 華為云 Flexus X2. DeepSeek-R1 模型3. Dify 平臺二、總體架構設計三、環境準備與資…

基于智慧經營系統的學校住宿登記報表分析與應用探究-畢業論文—仙盟創夢IDE

摘要本文聚焦學校住宿場景&#xff0c;以 “未來之窗智慧經營&#xff08;學校住宿&#xff09;” 系統生成的日報表、昨日報表、本月報表為研究對象&#xff0c;深入剖析報表數據結構、功能價值及在住宿管理中的應用。通過解讀水費、電費、押金、房費、總計、訂單等數據維度&a…

arping(ARP協議網絡測試工具)

1. 項目介紹&#xff1a;arping 是一個用于在局域網&#xff08;LAN&#xff09;中查找特定 IP 地址是否被占用的實用工具。與傳統的 ping 命令不同&#xff0c;arping 使用 ARP 協議來發送和接收數據包&#xff0c;從而能夠檢測到那些阻止 ICMP 請求的主機。arping 可以幫助網…

【UE5醫學影像可視化】讀取dicom數據生成2D紋理并顯示

文章目錄1.實現目標2.實現過程2.1 數據準備2.2 創建項目2.3 dcmtk庫集成2.4 流程&原理2.5 材質2.6 應用實現3.參考資料1.實現目標 本文在UE5中讀取本地的dicom文件&#xff0c;解析像素值、窗寬窗位等信息&#xff0c;生成2D紋理&#xff0c;在UE場景中實現簡單的2D醫學影像…

lua(xlua)基礎知識點記錄一

1. 關于 (…) 操作符 編譯階段優化&#xff1a;Lua 編譯器會對常量字符串進行優化處理&#xff0c;將連續的字符串拼接操作 (…) 合并為單個字符串。這種優化僅適用于編譯期確定的常量字符串&#xff0c;不適用于運行時生成的動態字符串。 示例&#xff1a;local str "He…

【Python數據采集】Python爬取小紅書搜索關鍵詞下面的所有筆記的內容、點贊數量、評論數量等數據,繪制詞云圖、詞頻分析、數據分析

Python爬取小紅書搜索關鍵詞下面的所有筆記的內容、點贊數量、評論數量等數據&#xff0c;繪制詞云圖、詞頻分析、數據分析 使用 Python 編寫一個簡單的爬蟲程序來從小紅書抓取與指定關鍵詞相關的筆記數據&#xff0c;并對這些數據進行基本的數據分析&#xff0c;包括詞云圖和…

最大子數組和問題-詳解Kadane算法

最大子數組和問題-詳解Kadane算法一、問題定義與暴力解法1.1 問題描述1.2 暴力解法的低效性二、Kadane算法的核心原理2.1 動態規劃思想的應用2.2 優化空間復雜度三、Kadane算法的Java實現3.1 基礎版本&#xff08;處理所有情況&#xff09;3.2 算法正確性驗證四、Kadane算法的變…

Mongoose網絡庫深度解析:從單線程到多線程的架構演進

0. 引言&#xff1a;C/C網絡編程的困境與突破 在C/C開發領域&#xff0c;網絡編程一直是一個令人頭疼的問題。與Python的requests庫或Go的net/http包不同&#xff0c;C/C缺乏統一的包管理體系和標準化的網絡API。開發者往往需要面對gcc/msvc版本差異、平臺兼容性問題、以及各種…

Jfinal+SQLite處理 sqlite數據庫執行FIND_IN_SET報錯

方法一原代碼sql " and FIND_IN_SET(s.M_ID," ids ")"; 修改為 sql " where s.M_ID"getInSql(ids);public static String getInSql(String ids) {String[] idArray ids.split(",");StringBuilder sql new StringBuilder(" I…

day24——Java高級技術深度解析:單元測試、反射、注解與動態代理

文章目錄一、單元測試&#xff1a;JUnit框架精要1.1 單元測試核心概念1.2 JUnit快速入門實戰基礎步驟&#xff1a;斷言機制驗證結果1.3 JUnit核心注解解析二、反射機制&#xff1a;框架設計的基石2.1 反射核心概念2.2 獲取Class對象的三種方式2.3 反射操作類成分獲取并執行構造…

網頁的性能優化,以及具體的應用場景

下面是每個性能優化技術的具體應用場景示例&#xff0c;結合代碼說明如何在實際項目中使用這些優化方法&#xff1a; 1. 批量DOM操作與DocumentFragment 應用場景&#xff1a;動態渲染大量列表項&#xff08;如評論區、商品列表&#xff09; 問題&#xff1a;逐個添加DOM元素會…

Fiddler 中文版 API 調試與性能優化實踐 官方中文網全程支持

在現代開發中&#xff0c;性能問題往往是產品上線后最容易被忽視的一環&#xff0c;尤其是API接口性能。一旦接口響應時間過長或在高并發場景下出現性能瓶頸&#xff0c;可能直接影響用戶體驗和系統穩定性。對于開發者來說&#xff0c;如何精確地找到瓶頸所在&#xff0c;如何模…

嵌入式硬件篇---機械臂運動學解算(3自由度)

實際 3 自由度機械臂的解算是機器人控制的核心&#xff0c;涉及運動學正解&#xff08;關節角度→末端位姿&#xff09;和逆解&#xff08;目標位姿→關節角度&#xff09;。以下從結構建模、解算方法、代碼實現和應用場景四個維度詳細展開&#xff0c;結合工業級機械臂的典型場…

在攝像機視圖中想像在普通 3D 視口里那樣隨意移動

有兩條最常用的方法&#xff1a;1. 「鎖定相機到視圖」(Lock Camera to View)步驟進入相機視圖&#xff1a;按 Numpad 0&#xff08;若無數字鍵盤&#xff0c;可在 Edit → Preferences → Input 勾選 Emulate Numpad 后用主鍵盤 0&#xff09;。右側呼出 N 面板&#xff0c;切…

An End-to-End Attention-Based Approach for Learning on Graphs NC 2025

NC 2025 | 一種基于端到端注意力機制的圖學習方法 Nature Communications IF=15.7 綜合性期刊 1區 參考:https://mp.weixin.qq.com/s/cZ-d8Sf8wtQ9wfcGOFimCg 今天介紹一篇發表在 Nature Communications 的圖學習論文《An end-to-end attention-based approach for learnin…

【牛客刷題】小紅的數字串

文章目錄 一、題目描述 1.1 輸入描述 1.2 輸出描述 1.3 示例1 二、高效解法 2.1 核心算法設計 2.2 算法設計理念 2.2.1 算法流程詳解 2.2.2 復雜度分析 2.3 算法優勢分析 2.3.1 關鍵優化點 2.3.2 正確性驗證 2.4 邊界處理 2.5 總結與擴展 一、題目描述 小紅拿到了一個數字串(由…

微算法科技技術創新,將量子圖像LSQb算法與量子加密技術相結合,構建更加安全的量子信息隱藏和傳輸系統

隨著信息技術的發展&#xff0c;數據的安全性變得尤為重要。在傳統計算模式下&#xff0c;即便采用復雜的加密算法&#xff0c;也難以完全抵御日益增長的網絡攻擊威脅。量子計算技術的出現為信息安全帶來了新的解決方案。然而&#xff0c;量子圖像處理領域仍面臨復雜度高、效率…