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

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

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

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

图片

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

具有“真实触感”的动捕数据手套mhand pro,提供更精确的动作捕捉

随着人工智能的普及和万物互联,vr虚拟技术备受关注,为了更加真实的虚拟现实交互体验,动捕数据手套的使用逐渐普及,vr手套可以实时采集各手指关节运动数据,使用动捕数据手套可以在虚拟现实的场景中实现对真实手部运动的…

YOLOv8独家原创改进:自研独家创新MSAM注意力,通道注意力升级,魔改CBAM

💡💡💡本文自研创新改进:MSAM(CBAM升级版):通道注意力具备多尺度性能,多分支深度卷积更好的提取多尺度特征,最后高效结合空间注意力 1)作为注意力MSAM使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,对标CBAM。 在道路缺陷检测任务中,原始ma…

前端算法专栏-数组-75.颜色分类

介绍 Hi 大家好。我是程序员库里,今天新开一个前端算法专栏。 接下来会分类给大家分享常考算法题目。 很多朋友也是看着这套系列算法拿到很多offer!所以也是想分享给更多朋友,帮助到有需要的朋友。 分类 数组-三路快排 题目 75. 颜色分…

import matplotlib.pyplot as pit 报 ImportError: DLL Load failed: 找不到指定的模块。

环境python 3.7,需要安装 numpy1.21.6 | matplotlib 2.2.5 看版本依赖 numpy https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy matplotlib https://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

每次吃一点ORB_Slam3代码 — 1. System类的初始化

文章目录 前言1. 代码调用位置2. 前置知识2.1 Sophus::SE3f 3. 代码细节3.1 System.h:3.2 System初始化函数: 小结 前言 ORB_SLAM3代码对于个人而言,感觉十分复杂。因为没有一些几何视图基础加上C薄弱,所以一直没法入门。基于这种…

CSS特效020:涌动的弹簧效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

商用车的智慧眼车规级激光雷达

1、商用车自动驾驶技术:巨大的降本增效空间 2、感知是第一步:看懂环境路况才能安全的自动驾驶 3、多传感器融合,感知信息冗余,保障自动驾驶安全 4、商用车需要什么样的激光雷达 5、车规级激光雷达的软硬件成熟度及延展性 &#x…

Python三级 每周练习题28

如果你感觉有收获,欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 题目: 1.运行hex(),得到 xa,括号里面填什么? 2.十六进制数100,对应10进制数是多少? 3.int(‘13’,8) 返回值是? 4.int(‘100010’,2) 返回值是? 5.int(‘2af…

模拟实现offsetof宏(详解)

我们在以前学过这个offsetof函数,知道它的功能是求指针相较于起始位置的偏移量,我们今天要来写出一个宏,计算结构体中某成员变量相对于起始位置的偏移。 目录 1.offsetof函数 1.1offsetof函数介绍 1.2offsetof函数代码实现 2.offsetof函数…

漏电保护器工作原理

漏电保护器 漏电保护器是低压线路中最常用的保护器之一,简称漏保,又称漏电开关或漏电断路器。漏电保护器除了具有空开的所有保护功能外,还具备漏电保护功能。 需要了解 一根通电导线可以产生磁场,磁场与电流方向遵循右手螺旋关…

没想到吧!成功的图标设计,只需遵循这几个原则

图标在任何用户界面环境中都是不可或缺的元素。虽然许多图标小到可能被忽视,但它们在解决设计难题和用户体验问题上却起着决定性的作用。作为一名UI设计师,你必须要掌握的基本技巧之一就是图标设计。理解并应用图标设计的原则不仅可以帮助设计师快速定位…

SQL Server :关系模式的键码与闭包计算

一、键码的定义 首先我们给出 键码的定义 如下 定义&#xff1a;已知 R<U,F> 是属性集 U 的关系模式&#xff0c;F是属性集 U 上的一组函数依赖&#xff0c;设 K 为 R<U,F> 中的属性或属性组合&#xff0c;若K ⇒ U - K 且 K 的任何真子集都不能决定 U&#xff0c…

你了解vue的diff算法吗?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的diff算法 目录 一、是什么 二、比较方式 三、原理分析 小结 一、是什么 diff 算法是一…

CSS新手入门笔记整理:CSS边框样式

边框宽度&#xff1a;boder-width 语法 boder-width:像素值&#xff1b; 边框样式&#xff1a;boder-style 语法 boder-style:取值&#xff1b; 属性值 说明 none 无样式 dashed 虚线 solid 实线 边框颜色&#xff1a;boder-color 语法 boder-color:色值&#xf…

C语言---操作符的详解(下)

目录 1. 结构成员访问操作符 1.1 结构体 1.2结构体成员访问操作符 1.2.1 直接访问 1.2.2 间接访问 2. 操作符的属性 2.1 优先级 2.2 结合性 3. 表达式求值 3.1 整型提升&#xff08;类型小于int&#xff09; 3.2 算术转换&#xff08;类型大于int&#xff09; 1. 结构…

常见的6种工业主板盘点

无论您涉及哪种类型的工业环境&#xff0c;主板都是所有电子元件的关键部件之一。可靠且高效的主板是任何功能系统的核心和灵魂。 不同的主板旨在满足不同的需求&#xff0c;如果您希望系统发挥最佳性能&#xff0c;则必须了解这些需求。本文提供了有关当今流行的6种工业主板的…

2023年09月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题3分,共30分) 第1题 角色为一个紫色圆圈,运行程序后,舞台上的图案是?( ) A: B: C: D:

个人开发者是否能借助开源获利?

前言 近几年国内外开源软件的成倍增长&#xff0c;以及开源软件在互联网领域的比重越来越高&#xff0c;开源软件扮演者越来越重要的角色&#xff0c;所以开源软件不仅推动了技术领域的不断创新和发展&#xff0c;也给个人开发者们提供了越来越多的合作机会和获利的机会。同时&…

深兰科技入选工信部首批“5G+智慧旅游”应用试点项目名

近日&#xff0c;国家文旅部与工信部确定并公布了我国首批《“5G智慧旅游”应用试点项目名单》&#xff0c;深兰科技基于AIGC多模态融合大模型技术开发打造的江汉路“5G智慧旅游”试点项目——武汉市江汉路步行街5G智慧商街创新应用&#xff0c;成功入选该名单。 作为由湖北省文…

[栈溢出+参数跟踪] [ZJCTF 2019]Login

题目来源 buuctf——[ZJCTF 2019]Login 本题主要考察参数溯源的能力。 参考链接 https://zhuanlan.zhihu.com/p/570607303 题目信息 64位&#xff0c;ubuntu16&#xff0c;开了金丝雀 C风格的代码&#xff0c;并且将admin登录信息写入代码中。 溢出点不在这里&#xff0c;但是…