MySQL主从同步延迟原因与解决方案

一、MySQL数据库主从同步延迟产生的原因

    MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。
    Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随即的,不是顺序的,成本高很多。另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。
常见原因:Master负载过高、Slave负载过高、网络延迟、机器性能太低、MySQL配置不合理。

二、关于DDL和DML

SQL语言共分为以下几大类:查询语言DQL,控制语言DCL,操纵语言DML,定义语言DDL。事务控制TCL

  • DQL(Data QUERY Languages)语句:即数据库定义语句,用来查询SELECT子句,FROM子句,WHERE子句组成的查询块,比如:select–from–where–grouop by–having–order by–limit

  • DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增删改表的结构

  • DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。增删改表的数据

  • DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的语句关键字有:GRANT,REVOKE。

  • TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

三、主从延时排查方法

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:

  • NULL,表示io_thread或是sql_thread有任何一个发生故障;

  • 0,该值为零,表示主从复制良好;

  • 正值,表示主从已经出现延时,数字越大表示从库延迟越严重

图片

四、解决方案

解决数据丢失的问题:

  • 半同步复制

    从MySQL5.5开始,MySQL已经支持半同步复制了,半同步复制介于异步复制和同步复制之间,主库在执行完事务后不立刻返回结果给客户端,需要等待至少一个从库接收到并写到relay log中才返回结果给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一个TCP/IP往返耗时的延迟。

  • 主库配置sync_binlog=1,innodb_flush_log_at_trx_commit=1 sync_binlog的默认值是0,MySQL不会将binlog同步到磁盘,其值表示每写多少binlog同步一次磁盘。

    innodb_flush_log_at_trx_commit为1表示每一次事务提交或事务外的指令都需要把日志flush到磁盘。

注意:将以上两个值同时设置为1时,写入性能会受到一定限制,只有对数据安全性要求很高的场景才建议使用,比如涉及到钱的订单支付业务,而且系统I/O能力必须可以支撑!

4.1 解决从库复制延迟的问题:

  • 架构方面

    1. 业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。

    2. 单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。

    3. 服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。

    4. 不同业务的mysql物理上放在不同机器,分散压力。

    5. 使用比主库更好的硬件设备作为slave,mysql压力小,延迟自然会变小。

  • 硬件方面

    1. 采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。

    2. 存储用ssd或者盘阵或者san,提升随机写的性能。

    3. 主从间保证处在同一个交换机下面,并且是万兆环境。

总结,硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。

  • mysql主从同步加速

    1. sync_binlog在slave端设置为0

    2. –logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。

    3. 直接禁用slave端的binlog

    4. .slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit =2

  • 从文件系统本身属性角度优化

    master端修改linux、Unix文件系统中文件的etime属性, 由于每当读文件时OS都会将读取操作发生的时间回写到磁盘上,对于读操作频繁的数据库文件来说这是没必要的,只会增加磁盘系统的负担影响I/O性能。可以通过设置文件系统的mount属性,组织操作系统写atime信息,在linux上的操作为:打开/etc/fstab,加上noatime参数/dev/sdb1 /data reiserfs noatime 1 2然后重新mount文件系统#mount -oremount /data

  • 同步参数调整主库是写,对数据安全性较高,比如sync_binlog=1,

    innodb_flush_log_at_trx_commit = 1 之类的设置是需要的而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率

4.2 MySql数据库从库同步其他问题及解决方案

  • mysql主从复制存在的问题:

    • 主库宕机后,数据可能丢失

    • 从库只有一个sql Thread,主库写压力大,复制很可能延时

  • 解决方法:

    • 半同步复制—解决数据丢失的问题

    • 并行复制----解决从库复制延迟的问题

  • 半同步复制mysql semi-sync(半同步复制)半同步复制:

    • 5.5集成到mysql,以插件的形式存在,需要单独安装

    • 确保事务提交后binlog至少传输到一个从库

    • 不保证从库应用完这个事务的binlog

    • 性能有一定的降低,响应时间会更长

    • 网络异常或从库宕机,卡主主库,直到超时或从库恢复

  • 主从复制–异步复制原理、半同步复制和并行复制原理比较

图片

图片

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

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

相关文章

08 木谷博客系统RBAC权限设计

这节内容说一下木谷博客系统的权限设计,采用现在主流的权限模型RBAC,对应关系如下: 以上5张表都在mugu_auth_server这个库中 该部分的服务单独定义在user-boot这个模块中。 将角色、权限对应关系加载到Redis 木谷博客系统在认证中心颁发令牌的时候是将用户的角色保存到令牌…

MySQL用得好好的,为何要转ES?

MySQL是一种关系型数据库,它可以高效地存储和查询结构化的数据。 ES是一种分布式搜索引擎,它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。 MySQL 和 ES 的数据存储方式也不同。MySQL 中的数据通常是以关系型表的形式存储在磁盘上&…

EOCR-PFZ数码型产品与控制柜主回路的连接方式

上海韩施电气自动化设备有限公司 施耐德EOCR新一代数码型电动机保护器具有体积小、精度高、抗干扰能力强等特点。为方便安装,EOCR数码型产品与控制柜主回路的连接具有多种方式,分别是:窗口型、贯穿性和端子型。 窗口型(韩施电气…

vue3中shallowReactive与shallowRef

shallowReactive与shallowRef shallowReactive: 只处理了对象内最外层属性的响应式(也就是浅响应式) shallowRef: 只处理了value的响应式, 不进行对象的reactive处理 总结: reactive与ref实现的是深度响应式, 而shallowReactive与shallowRef是浅响应式。 什么时候用浅响应…

万字解析设计模式之观察者模式、中介者模式、访问者模式

一、观察者模式 1.1概述 观察者模式是一种行为型设计模式,它允许一个对象(称为主题或可观察者)在其状态发生改变时,通知它的所有依赖对象(称为观察者)并自动更新它们。这种模式提供了一种松耦合的方式&…

园区智能配电系统(电力智能监控系统)

园区智能配电系统是一种针对园区电力配送和管理的智能化系统。它的主要功能是实时监控设备运行情况,进行电能质量分析,监控电能损耗,以及分时段用电统计等。 具体来说,园区智能配电系统可以利用现代技术如RS-485总线通信、数据库管…

Android Studio 添加so无法打包进apk问题

1.开发环境: Android Studio 2022.3.1 Patch 2 jdk 17 gradle-7.4 2.build.grade配置检查 首先查看build.gradle中是否设置sourceSets ,如果设置的话,打包的时候so是被指导libs目录下的,所有就不能把jnilibs下。 sourceSets {mai…

计算机视觉面试题-03

1、简单介绍一下sigmoid,relu,softplus,tanh,RBF及其应用场景 这里简单介绍几个激活函数及其应用场景: Sigmoid 函数(Logistic 函数): 公式: s i g m a ( x ) 1 1 e …

2023仿聚合搜索程序源码/轻量级搜狗泛站群程序源码/PHP整站源码+完美SEO优化+符合搜狗算法

源码简介: 2023仿聚合搜索/轻量级搜狗泛站群程序整站源码,作为PHP源码,可以完美SEO优化,符合搜狗搜索引擎算法。 轻量级的PHP搜狗泛站群程序源码,完美SEO优化符合搜狗搜索引擎算法,无需任何采集&#xff…

【Unity细节】为什么加载精灵图集直接导致Unity引擎崩溃

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

Oracle Linux 9.3 发布

导读Oracle Linux 9 系列发布了第 3 个版本更新,支持 64 位 Intel 和 AMD (x86_64) 以及 64 位 Arm (aarch64) 平台。与所有的 Oracle Linux 版本一样,此版本与相应 RHEL 版本 100% 应用二进制兼容。 对于 x86_64 和 aarch64 架构,Oracle Li…

Unity - Graphic解析

Gpahic 的作用 Graphic 是 Unity最基础的图形基类。主要负责UGUI的显示部分。 由上图可以看你出我们经常使用的Image,Text,都是继承自Graphic。 Graphic的渲染流程 在Graphic的源码中有以下属性 [NonSerialized] private CanvasRenderer m_CanvasRend…

Kafka生产者发送消息的流程

Kafka 生产者发送消息的流程涉及多个步骤,从消息的创建到成功存储在 Kafka 集群中。以下是 Kafka 生产者发送消息的主要步骤: 1. 创建消息 生产者首先创建一个消息,消息通常包含一个键(可选)和一个值,以及…

Verilog基础:时序调度中的竞争(二)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言,Verilog HDL常常需要使用语句描述并行执行的电路,但其实在仿真器的底层,这些并行执行的语句是有先后顺序…

Ubuntu:安装VSCode

参考博客Ubuntu下安装VSCODE_ubuntu安装vscode-CSDN博客中的第二种方式【安装包方式安装】,即可,安装非常easy~~~ 安装包方式安装: 1. 从VSCode官网下载最新版的deb安装包: https://code.visualstudio.com/Download,…

使用Prometheus监控Synology(群辉)

1、简介 在现代的IT环境中,对于服务器和网络设备的监控是至关重要的。Synology(群辉)作为一种流行的网络存储解决方案,为用户提供了高性能和可靠的存储服务。然而,了解Synology设备的运行状况和性能指标对于确保其正常…

车辆管控大数据可视化平台案例源码分析【可视化项目案例-10】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论你是初学者还是资深开发者,这里都有适合你的内容。…

Windows平台下的oracle 11G-11.2.0.4补丁升级操作指南

序号 文件名称 文件说明 1 p6880880_112000_MSWIN-x86-64_OPatch 11.2.0.3.33 for DB 11.2.0.0.0 (Feb 2022) 用于升级 OPatch 2 DB_PSU_11.2.0.4.220118 (Jan 2022)_p33488457_112040_MSWIN-x86-64 主要补丁文件 注意:请用管理员权限运行文件内命令&#…

Stable Video Diffusion(SVD)安装和测试

Stable Video Diffusion(SVD)安装和测试 官网 github | https://github.com/Stability-AI/generative-modelsHugging Face | https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xtPaper | https://stability.ai/research/stable-vid…

Nodejs+Vue校园餐厅外卖订餐点餐系统 PHP高校食堂 微信小程序_0u4hl 多商家

对于校园订餐小程序将是又一个传统管理到智能化信息管理的改革,对于传统的校园订餐管理,所包括的信息内容比较多,对于用户想要对这些数据进行管理维护需要花费很大的时间信息,而且对于数据的存储比较麻烦,想要查找某一…