详解如何解决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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;量子图像处理领域仍面临复杂度高、效率…