首页 > 数据库 >MySQL主从同步优化指南:架构、瓶颈与解决方案

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

时间:2024-06-06 23:32:35浏览次数:24  
标签:主库 架构 查询 MySQL 从库 主从 延迟

前言

​ 在现代数据库架构中,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. 掘金:美团面试被问到主从延迟的解决办法

标签:主库,架构,查询,MySQL,从库,主从,延迟
From: https://blog.csdn.net/u013911096/article/details/139397068

相关文章

  • CUDA与架构矩阵概览
    CUDAToolkit、驱动程序与架构矩阵CUDA驱动程序提供了向后兼容的API,因此新版本的NVIDIA驱动程序总是能与(使用旧版本CUDAToolkit编译的)应用程序协同工作。CUDA的这一行为在此处有详细记录。然而,每个CUDAToolkit都需要最低版本的NVIDIA驱动程序作为支持。相应地,当使用如nvidia-sm......
  • MySQL三大日志
    总述:undolog日志是inndb存储引擎层生成的日志,实现了事务的原子性,主要用于事务回滚和MVCC。redolog日志是inndb存储引擎层生成的日志,实现了事务的持久性,主要用于掉电等故障恢复。binlog日志是Server层生成的日志,主要用于数据备份和主从复制。undolog回滚日志undolog是......
  • UDP——实现C/S架构,有一台服务器,服务器中存储n首音频,要求客户端可以直接下载服务器的
    实现C/S架构,有一台服务器,服务器中存储n首音频,要求客户端可以直接下载服务器的音频,并且可以正常在客户端播放。服务器/*************************************************************************************************************************** filename: udp_ser......
  • 【云原生进阶之数据库技术】第二章-Oracle-原理-4.4.2-SGA架构
    1系统全局区:SGA1.1SGA概念简介        SGA是一块可读写内存区域,与Oracle后台进程(backgroundprocesses)一起构成了数据库实例。所有代表用户执行的服务器进程都能读取实例SGA里的信息。有一些进程能在数据库运行时写入SGA。需要注意的是,服务器和后台进程本身并不在......
  • 微前端学习笔记(1):微前端总体架构概述,从微服务发微
    从最初的CS架构,如MFCJavaSwing等,到BS架构,JSPPHP,再到前端后端分离,前端从jquery  GWT-Ext 到Handlebars,再到angularJS/Vue/React,反观java世界,学好SpringMyBatis,一路无忧,哎…… 微服务为了解决庞大的一整块后端服务带来的变更与扩展方面的限制,出现了微服务架构(Mic......
  • Maven实战案例:搭建微服务Maven工程架构
    1.1项目需求和结构分析需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。项目架构:1.用户服务:负责处理用户相关的逻辑,例如用户信息的管理、用户注册、登录等。2.订单服务:负责处理订单相关的逻辑,例如订单的创建、订单支付、退货、订单查看等。......
  • 聊聊如何理解MySQL引擎--Innodb和MyISAM和Memory
    mysql的常见的引擎有许多比如,MYISAM、Innodb、Memory、MERGE。可以通过mysql>showengines;查看数据库提供的引擎:我们今天聊聊如何理解Innodb和MyISAM,Memory,这是面试时会问的问题。首先是Innodb:先上概念:Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支......
  • 安卓架构组件-依赖注入
    安卓依赖注入什么是依赖注入依赖注入(DI,DependencyInjection)是一种广泛的编程技术。把依赖(所需对象)传递给其它对象创建,好处是类的耦合更加松散,遵循依赖倒置的原则。类获取所需对象classEngine{funstart(){println("enginestart")}}class......
  • Java (Docker MySql)
    前沿加油每天进步一点就是无敌可以去官网下载Docker yuminstall-ydocker重启刷新停止sudosystemctlstartdockersudosystemctlstopdockersudosystemctlrestartdocker哈可以装客户端端dcocker直接安装就完事了  然后安装mysql然后遇到这样的......
  • AI算力暴增至120TOPS 英特尔Lunar Lake架构解析
    随着下一代AIPC硬件核心LunarLake的发布,英特尔4年5个制程节点演进也逐步迎来富有革命性的时刻。面对AI时代指数级的算力需求增长,英特尔LunarLake,也就是第二代酷睿Ultra平台的CPU+GPU+NPU算力突破到了120TOPS,这将为基于其打造的AIPC赋予更加强劲、高效的AI性能体验。在台北电......