MySQL主从同步优化指南:架构、瓶颈与解决方案

news2024/11/26 22:40:41
前言

​ 在现代数据库架构中,MySQL 主从同步是实现高可用性和负载均衡的关键技术。本文将深入探讨主从同步的架构、延迟原因以及优化策略,并提供专业的监控建议。

MySQL 主从同步架构

在这里插入图片描述

主从复制流程:

  1. 从库生成两个线程,一个 I/O 线程,一个 SQL 线程;

  2. I/O 线程去请求主库的 binlog,并将得到的 binlog 日志写到 relay log(中继日志) 文件中;

  3. 主库会生成一个 log dump 线程,用来给从库 I/O 线程传 binlog;

  4. SQL 线程会读取 relay log 文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

主从延迟原因
  1. 主库写入是并发的,从库 relay log 回放是单线程的,但在 mysql 5.6 版本后提供了 MySQL 的并行复制策略,丁奇的 MySQL 实战45讲有详细介绍
  2. 主库有大事务执行,比如一个事务在主库执行10s,从库再回放10s,那么对于当前事务数据主从延迟就是20s
  3. 主库或从库 CPU、磁盘IO过高
    1. 主库 TPS 过大,从库来不及回放
    2. 从库有大量全表扫描查询导致的磁盘IO,笔者曾经就遇到过由于数仓晚上进行从库扫库而导致的20几秒主从延迟
  4. 网络问题
    1. 主从网络延时过高
    2. 主从带宽不够
  5. 服务器硬件性能不足,如CPU、内存或磁盘性能,会影响复制效率
  6. MySQL配置不合理:如binlog格式、复制方式(异步或半同步)等配置不当可能导致延迟
  7. 锁等待:从库上的大型查询语句可能会产生锁等待,影响复制进程
主从延迟优化方案
  1. 强制读主:一致性要求高的业务读取主库,其它业务读从库,这个方法在实际开发过程中使用的很多
  2. 先读从库,未命中再读主库:适合查询新增的数据,先查询从库,当数据不存在再查询主库,可能会导致会多一次查询从而导致查询时间变长。
  3. 分库分表:减少单个主库或从库由于压力过大而导致的延迟
  4. 优化网络:确保主从服务器之间有足够的网络带宽和低延迟的连接
  5. 并行复制:在MySQL 5.6及以上版本中,可以开启并行复制功能,允许从服务器并行执行复制的事务。
  6. 减少持久化频率:调整 sync_binlog 和 innodb_flush_log_at_trx_commit 参数,以减少每次事务提交时的磁盘同步操作。
  7. 优化查询:确保主服务器上的查询是高效的,减少不必要的复杂查询和大事务。
  8. 索引优化:确保从服务器上的索引是最优的,以加快查询速度。
  9. 使用SSD:相比传统硬盘,SSD有更快的读写速度,可以减少I/O瓶颈。
监控与维护

​ 有效的监控是确保主从同步健康运行的关键。使用专业的监控工具,如 Percona Toolkit,可以帮助我们实时监控复制状态,及时发现并解决延迟问题。

Reference
  1. 腾讯云开发者社区 - MySQL主从同步原理和应用
  2. 掘金 - 看完这篇还不懂 MySQL 主从复制
  3. Zq99299 的技术博客 - 主从复制状态机与所有分布式存储都是这么复制数据的
  4. Worktile MySQL主从延迟问题怎么解决
  5. 掘金:美团面试被问到主从延迟的解决办法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何替换fmod studio的.bank文件内的音效?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

【Java毕业设计】基于JavaWeb的旅游论坛管理系统

文章目录 摘 要目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 Java编程语言1.4.2 vue技术1.4.3 MySQL数据库1.4.4 B/S结构1.4.5 Spring Boot框架 2 系统需求分析2.1 可行性分析2.2 系统流程2.2.1 操作流程2.2.2 登录流程2.2.3 删除信息…

【微信小程序开发(从零到一)】——个人中心页面的实战项目(一)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

(ICLR,2024)HarMA:高效的协同迁移学习与模态对齐遥感技术

文章目录 相关资料摘要引言方法多模态门控适配器目标函数 实验 相关资料 论文:Efficient Remote Sensing with Harmonized Transfer Learning and Modality Alignment 代码:https://github.com/seekerhuang/HarMA 摘要 随着视觉和语言预训练&#xf…

Rhino-Grasshopper:小白从入门开始学习

前言: 小编在这里即将开启一个新系列学习课程,主要内容为基于Rhino的3D打印学习,具体包括Rhino中的Python使用,Grasshopper的功能,讲解视频会陆续更新在B站,希望大家多多支持! 关于相关学习、…

list(二)和_stack_queue

嗨喽大家好,时隔许久阿鑫又给大家带来了新的博客,list的模拟实现(二)以及_stack_queue,下面让我们开始今天的学习吧! list(二)和_stack_queue 1.list的构造函数 2.设计模式之适配器和迭代器 3.新容器de…

HTML静态网页成品作业(HTML+CSS)—— 保护环境环保介绍网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

公检法部门保密网文件导出,这样做才是真正的安全又便捷

公检法是司法机关的核心组成,也是社会管理的重要组成,公检法部门的业务中涉及大量的居民数据、个人隐私、司法案件等信息,因此,数据的安全性至关重要。 根据我国法律要求,同时基于对数据的保护需要,我国的公…

Vue06-el与data的两种写法

一、el属性 用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一个占位符。 1-1、写法一 1-2、写法二 当不使用el属性的时候: 两种写法都可以。 v.$mount(#root);写法的好处:比较灵活: 二、data的两种写法 2-1、对象式…

discuz点微同城源码34.7+全套插件+小程序前端

discuz点微同城源码34.7全套插件小程序前后端 模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序

重磅就业报告前美股涨势消减,标普暂别纪录高位,英伟达盘中闪崩近6%,欧央行降息预期“退烧”,欧元跳涨

标普纳指创盘中历史新高后转跌,道指三连涨至近两周新高;芯片股指和台积电美股跌落纪录高位,英伟达三日收创历史新高后回落;游戏驿站盘中一度暴拉50%。中概股指回落,财报后蔚来收跌6.8%。欧央行会后,欧元盘中…

Dvws靶场

文章目录 一、XXE外部实体注入二、No-SQL注入三、Insecure Direct Object Reference四、Mass Assignment五、Information Disclosure六、Command Injection七、SQL注入 一、XXE外部实体注入 访问http://192.168.92.6/dvwsuserservice?wsdl,发现一个SOAP服务。在SO…

Golang | Leetcode Golang题解之第136题只出现一次的数字

题目: 题解: func singleNumber(nums []int) int {single : 0for _, num : range nums {single ^ num}return single }

【微信小程序】页面事件

下拉刷新 上拉触底 上拉触底距离指的是触发上拉触底事件时,滚动条距离页面底部的距离。 可以在全局或页面的json配置文件中,通过onReachBottomDistance属性来配置上拉触底的距离。 小程序默认的触底距离是50x,在实际开发中,可以根据自己的需…

三石峰汽车生产厂的设备振动检测项目案例

汽车生产厂的设备振动检测项目 ----天津三石峰科技(http://www.sange-cbm.com) 汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等问题,为了避免意外停机造成损失,需要加装一些健康监测设备&#xf…

002.数据分析_Pandas初识

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

基于pulseaudio实现一个边录边播的demo

文章目录 前言一、主要APIpa_simple_newpa_simple_readpa_simple_write 二、C代码实现三、注意事项1、必须装有 libpulsedev 包2、编译方式3、运行说明 前言 通过上一讲,我们实现了一个加载pulseaudio的module-loopback的功能来实现侦听,那么除了加载模…

软件杯 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

【Python深度学习系列】网格搜索神经网络超参数:批量大小和迭代周期数(案例+源码)

这是我的第297篇原创文章。 一、引言 在深度学习中,超参数是指在训练模型时需要手动设置的参数,它们通常不能通过训练数据自动学习得到。超参数的选择对于模型的性能至关重要,因此在进行深度学习实验时,超参数调优通常是一个重要的…

C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点

前言: 在前面,我们已经学习了STL中的string和vector,现在就来讲解STL中的最后一个部分——list的使用及其相关知识点,先说明一点,因为我们之前已经讲过了string和vector的接口函数等用法,list的这些用法与它…