一、如何监控发生了主从延迟?

在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0。

Mysql主从延迟一个重要的原因之一是:mysql是以单线程串行执行。

主从复制数据时,在从服务器上的mysql,是一个线程在同步数据。

串行的方式,它是指,执行一个后才继续执行下一个。如果一个卡住了,要等待时间,才会继续下一个。串行与并行是相反的。

二、同步延迟发生的场景

当主库的TPS并发较高时,产生的DDL(修改类的sql语句)数量,超过了slave机器sql线程所能承受的能力,那么延时就会产生了。

主库写binlog日志到文件的时候,是顺序写入到磁盘,顺序写入速度是很快,避免了磁盘随机寻址。

从库的同步线程(Slave_IO_Running),将binlog在slave上执行的时候,实际上是随机的,速度肯定要慢点。

从库的同步线程(Slave_IO_Running)只有应该线程在操作,整个mysql实例就一个这样的线程,那么,如果mysql有n个库的数据需要同步,全部要这个线程来处理。人手不够啊(mysql-5.6.3)

三、解决思路

如何避免或解决主从延迟?可以用来解决的办法,有如下的:

  • 从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。

  • 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。

  • 从库使用SSD磁盘。机械硬盘是靠磁头旋转到指定位置来读数据、写数据。转来转去的,我们叫做i/o。磁盘i/o存在速度瓶颈。固态硬盘是一个电子设备,电子设备不需要机械旋转,读写固态硬盘上任意位置的数据,速度都是一样的。

  • 业务代码的妥协。将实时性要求高的某些操作,使用主库做读操作。比如我写了数据到主库了,需要马上展示数据,不要到从库去读数据,因为从库可能还没同步过去呢。直接从主库读数据,保证是最新的数据展示。

  • 从库的线程改为多个同步线程同步数据。mysql-5.6.3为了解决这个问题,从服务器上,每一个库开一个线程来同步。
  • 网络优化。网络堵塞,也会导致同步延迟。跨机房的数据库同步,会存在同步延迟。保证主从在同一个机房里面去。

附:mysql主从复制的三种格式数据

第一种是,statement格式。也就是记录下原来执行的sql语句。

这是最早的一种方式,后来发现也不是很完美,在复制的过程中会存在一些问题。

举例:由于sql语句中使用了某些mysql函数,而这个mysql函数是特定版本才有的,其他版本是没有这个函数,放到slave端运行,假如slave的mysql版本不一样,就可能执行出现问题。

使用了特定的功能,如果sql中使用了last_insert_id()函数,当同样的sql语句复制到slave端执行的时候,last_insert_id()所得到的结果是不同的。

上面两种情况导致了:复制过程中,slave端的结果没有完全与master端一致了。

而基于row格式的就不会。于是发明了row格式的。

第二种,基于row格式的。会记录下每一行修改前和修改后的值。binlog中存储的就是被修改行的修改前和修改后的值,直接拿到结果即可。重做。

基于row的格式有个缺点:涉及到ddl操作,比如alter table,加一个字段,那么意味着整个表的行都要进行修改。那么binlog中记录的是整个表中行的数据,造成binlog中的数据量很大。

于是,又发明了基于statement格式和基于row格式的综合版,叫做mixed

第三种:mixed

遇到ddl表变更操作,则使用statement格式,遇到delete或update格式,则使用row格式。

三种格式的发展过程总结:

一直使用statement格式,到了5.1.5版本才支持row格式。后来存储过程的出现,又带来了新的问题。存储过程中调用一些函数,在slave端运行结果会不同。所以5.1.8版本开始支持mixed格式。上面所有策略的做法目标是,让master与slave的数据保持一致。从这个角度出发。

mysql主从复制延迟问题的相关知识与解决方案相关推荐

  1. MySQL主从复制延迟原因及处理思路

    简单概述一下复制逻辑: 1.主库将对数据库实例的变更记录到binlog中. 2.主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Master has se ...

  2. 【踩坑记录】记一次MySQL主从复制延迟的坑

    最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...

  3. mysql主从复制延迟解决

    mysql主从配置成功,但是过段时间再操作master,发现slave没有同步更新 复制有延迟,slave想要尽可能及时跟上master的进度,可以尝试采用以下几种方法: 1.采用MariaDB发行版 ...

  4. 动力节点老杜mysql文件_mysql主从复制+mysql主从复制延迟解决方案

    ### 1. 为什么需要mysql主从复制 1. 数据热备 在复杂的业务场景中, 可能因为某一条sql造成了锁表, 这样就会影响正常的业务运行.在复杂的业务场景中, 我们可以使用mysql主从复制, ...

  5. Mysql主从复制及Tomcat的相关介绍

    数据库常遇到的问题: 1.向上拓展 scale up( 个体本身 硬件的拓展) 缺点:容易达到极限 2.向外拓展 scale out(计算机的个数,组合成集群) 摩尔定律:每18个月芯片的技术翻一倍, ...

  6. mysql主从复制replication的一些相关命令

    主服务器上的相关命令: show master status; mysql> show master status\G *************************** 1. row ** ...

  7. mysql 案例~mysql主从复制延迟处理(2)

    一 简介:今天来聊聊周期性从库延迟的问题,是上一篇的基础分析的一个场景 二 背景:近期每天的指定时间段,收到从库延迟的报警,然后过一段时间恢复.由于从库是提供读服务的,所以需要解决 三 分析思路: 1 ...

  8. mysql replication延迟_深入mysql主从复制延迟问题的详解

    面试mysqldba的时候遇到一个题: 描述msyql replication 机制的实现原理,如何在不停掉mysql主库的情况下,恢复数据不一致的slave的数据库节点? MySQL的复制(repl ...

  9. 字节跳动高工面试:mysql主从复制延迟

    RPC概述 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样. 现在互联网应用的量级越 ...

最新文章

  1. 提升Hadoop计算能力的并行框架
  2. 4 . 2 存储系统
  3. qt 表格表头嵌入全选全不选_6个word表格基础操作,看了再说会不会
  4. linux 添加用户
  5. DataInputStream
  6. OOo on ready---VB篇
  7. SQLite的基本使用一
  8. bat窗口大小设置_8-Flink中的窗口
  9. 文科生能学懂python吗_文科生也能学得懂的Python入门视频
  10. SQL Server的导出导入方式有
  11. 膨胀的木棍(信息学奥赛一本通-T1246)
  12. 学Python的女生好不好找工作?
  13. 多校3 1008 Solve this interesting problem
  14. 【iOS越狱开发】iOS越狱步骤1之环境搭建
  15. 迟来的2015年终总结
  16. 计算机如何连接wifi台式,台式电脑怎么连wifi
  17. Word2019修改背景色失效的解决方法
  18. 137.Linux输入子系统基本概念
  19. ds18B20_verilog
  20. Hoeffding 不等式

热门文章

  1. scala面试问题_Scala高级面试问答
  2. C++进阶教程之动态内存
  3. UTF-8 编码及检查其完整性
  4. LoadRunner调用Oracle存储过程
  5. 51Nod 1046 A^B Mod C(日常复习快速幂)
  6. MyEclipse破解文件+破解说明
  7. 查询软件和硬件列表清单[将文章里代码另存为 list.vbs,双击运行就会出现一个html页面]...
  8. Divide and conquer method
  9. Leetcode 410.分割数组的最大值(最优解是二分法)
  10. 【CV】如何使用Tensorflow提供的Object Detection API --1--使用预训练模型