MySql主从同步延迟怎么办?

文章目录

    • 什么是MySQL主从架构
      • 主从架构的组成
      • 工作原理
      • 主从复制的步骤
      • 主从架构的优点
      • 主从架构的缺点
    • 什么是主从同步延迟
    • 为什么会导致主从延迟
    • 主从延时的排查和解决
    • 如果发现主从数据不一致怎么办?

我们常说的业务量越来越大,I/O访问频率过高,单机无法满足,就会用到读写分离之类的多库方案
所以我们首先要知道什么是MySQL主从架构

什么是MySQL主从架构

通过字面上来看,最起码要有两台数据库,并且他们的关系是主与从。MySQL主从复制就是将数据库群中一台或多台服务器作为主(master)数据库,其他数据库作为从(slave)数据库,然后指向主库,实时同步主库中的数据;当主库数据发生变化时,会将变化的数据实时同步到一个或多个从库。
这是一种数据库复制和分布式存储的解决方案,核心是将数据从一个主服务器(Master)复制到一个或多个从服务器(Slave)。这种架构主要用于数据备份、读写分离、负载均衡和高可用性。当然凡事都有两面性,如数据延迟和写入瓶颈,因此在设计系统时需要根据实际需求进行权衡
在这里插入图片描述

主从架构的组成

主服务器(Master):负责处理写操作(INSERT、UPDATE、DELETE 等),并将这些更改记录到二进制日志(binary log)中
从服务器(Slave):通过读取并应用主服务器的二进制日志来复制数据,通常用于处理读操作(SELECT)

工作原理

二进制日志(Binary Log):主服务器上的所有更改都会记录在一个二进制日志中
中继日志(Relay Log):从服务器从主服务器接收二进制日志的内容,并将其存储在自己的中继日志中
I/O线程:从服务器上的I/O线程负责从主服务器读取二进制日志,并写入中继日志
SQL线程:从服务器上的SQL线程负责读取中继日志,并将这些更改应用到从服务器的数据库中

主从复制的步骤

启动复制:在主服务器上启用二进制日志,并创建一个具有复制权限的用户
配置从服务器:配置从服务器,指定主服务器的地址、登录凭证等,并指定复制的起点
数据同步:在开始复制之前,通常需要将主服务器上的数据同步到从服务器
启动复制进程:在从服务器上启动复制进程,开始复制操作

主从架构的优点

数据冗余:提供数据备份,增加数据安全性
读写分离:通过从服务器处理读请求,可以提高系统的读取性能
负载均衡:分散数据库的访问压力,提高系统整体的处理能力
高可用性:当主服务器出现故障时,可以快速切换到从服务器,减少系统停机时间

主从架构的缺点

数据延迟:从服务器复制数据可能会有延迟,导致数据不一致的问题
故障恢复:当主服务器出现故障时,需要手动或通过自动化工具进行故障转移
写入瓶颈:所有的写操作都必须通过主服务器,可能会成为系统的瓶颈

什么是主从同步延迟

那么再说回什么是主从同步延迟,其实只要使用到了主从设计,基本都会有主从延迟的问题,只是说延迟的严重的程度不一样而已

从字面词汇解释:主从延时,通常指的是在数据库的主从复制架构中,从服务器(Slave)在接收并应用主服务器(Master)上的数据变更时所经历的时间延迟。具体来说,当主服务器上的数据发生变化后,这些变更需要通过复制机制同步到从服务器,而从服务器处理这些变更并完成数据同步所需的时间就构成了所谓的延时

一般来说几百毫秒以内可能都是能接受的范围

为什么会导致主从延迟

  1. 负载过高:这里其实不管主库还是从库的负载比较高,都可能会导致延迟。这里先额外说一个事情,很多人觉得主库负责写,从库只负责读,所以主库的配置需要高一点,从库低一点也无所谓,但其实这是一个误区,你要清楚所有写在主库的数据,在从库都需要写一遍,而且要求时延低的话,从库的压力其实并不比主库低。所以如果主库的并发量压力较高时,可能会导致从库来不及写入
    或者本身从库的负载较高了,因为从库都是串行去写入了,为了保证数据一致性,前面也说了其实从库就是把主库执行过的sql也同样的按顺序执行一次,如果中途可能因为执行其他查询或者某一个复杂的事务等,也可能导致无法及时处理同步过来的数据
  2. 网络延迟:主从服务器之间的网络延迟也会影响同步效率,这个字面也很好理解
  3. 硬件性能不足:如果从库的硬件性能不足,处理同步数据的速度会受到影响,这个在第一点里面也做过解释
  4. MySQL配置不合理:如sync_binlog和innodb_flush_log_at_trx_commit等配置不当可能导致延迟
  5. 锁等待:从库在执行同步操作时可能遇到锁等待,特别是大型查询语句

主从延时的排查和解决

先确认复制是否正常在运行,然后就是分析导致延时的原因

  • 使用show slave status命令,了解当前的延时情况
    • 查看Seconds_Behind_Master参数 NULL:表示I/O线程或SQL线程发生故障。0:表示主从复制状态正常,无延迟。正值:表示主从已经出现延时,数值越大,延迟越严重
    • Slave_IO_Running 和 Slave_SQL_Running:这两个状态都应该是Yes,如果不是,说明复制过程中断了
    • Last_IO_Error 和 Last_SQL_Error:如果复制出错,这里会显示错误信息
  • 检查主从机器之间的网络延迟,查看是否出现问题,如使用ping或traceroute命令来测试网络连接
  • 检查带宽限制,这个虽然一般不会出现,但是高负载时也可能带宽不够导致复制延迟
  • 检查主服务器的二进制日志和从服务器的中继日志文件大小,如果日志文件过大,可能会导致处理缓慢
  • 检查服务器资源是否有大的波动

解决办法就是先根据问题分析的原因来做不同的处理应对

  • 优化主从服务器的硬件配置,提升处理能力
  • 调整MySQL的复制配置,如修改sync_binlog和innodb_flush_log_at_trx_commit参数,以平衡数据安全性和性能
  • 网络优化,确保主从服务器之间的网络连接稳定且带宽充足
  • 业务逻辑优化,避免大事务和长耗时操作
  • 调整中继日志的配置,比如日志的大小和刷新策略,减少服务器的I/O压力

如果发现主从数据不一致怎么办?

1、首先是检查主从同步是否还在正常执行
2、检查延时问题,是否是延时导致的
3、检查最新的数据,看是最后的数据没同步到还是中间的数据没同步到
4、确认主从服务器的错误日志,看是否有相关的异常
5、如果数据不一致且无法通过简单的修复来解决,可能需要重新同步数据:
停止复制:在从服务器上执行STOP SLAVE;命令停止复制
数据备份与恢复:使用mysqldump或其他备份工具从主服务器备份数据,并在从服务器上恢复
重置复制:在从服务器上重置复制状态,重新配置复制并启动

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

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

相关文章

Vue + SpringBoot:el-upload组件单文件、多文件上传实战解析

文章目录 单文件上传后端前端 多文件上传后端前端 单文件上传 后端 PostMapping("/uploadDxfFile") public R uploadDxfFile(RequestParam(value "file", required true) MultipartFile multipartFile) throws Exception {// 文件校验工作if (multipar…

redis 如何使用 scan, go语言

建议用方案乙 文章目录 场景方案方案甲方案乙 拓展 场景 redis 中存在大量 key。 其中有一部分是用户登陆的 session_id, 结构是 : session_id:1session_id:2session_id:3需求: 有多少用户在线 方案 方案甲 keys session_id:*这种方式简…

Linux运维:MySQL备份,物理冷备份,热备,完备+二进制日志

备份类型 完全备份、增量备份、差异备份 完全备份:整个数据集都备份 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂。 差异备份:对比前一次备…

《Windows API每日一练》8.3 scrollbar控件

在第三章SYSMETS2.C实例中,我们是通过CreateWindow函数创建窗口的参数窗口样式中添加垂直或水平滚动条。本节我们将讲述作为子窗口控件的滚动条。 本节必须掌握的知识点: 滚动条类 滚动条控件和着色 8.3.1 滚动条类 ■窗口滚动条与滚动条控件的异同 …

纯javascript实现图片批量压缩打包zip下载后端ThinkPHP多国语言切换国际站

最近在做一个多国语言的工具站,需要实现多国语言切换,说到多国语言站,肯定是有2种方式,第一是子域名,第二就是子目录。根据自己的需要来确定。 后台配置如下: 前台显示: 前端纯javascript实现…

人工智能开发中的数据隐私

人工智能开发中的数据隐私对于建立用户信任和遵守严格法规至关重要。保护敏感信息可确保合乎道德的人工智能使用并防止有害的数据泄露。 为什么在人工智能开发中优先考虑数据隐私至关重要 人工智能的迅猛发展开启了一个前所未有的技术进步时代,彻底改变了各行各业&…

Python创建MySQL数据库

一、使用Docker部署本地MySQL数据库 docker run --restartalways -p 3307:3306 --name mysql -e MYSOL_ROOT_PASSWORDlms123456 -d mysql:8.0.25 参数解析: 用户名:root 密码:lms123456 端口:3307 二、在Pycharm开发工具中配置连接MySQL数据库 三、安装zdppy_mysql pip inst…

全新UI自助图文打印系统小程序源码 PHP后端 附教程

最新自助图文打印系统和证件照云打印小程序源码PHP后端,为用户用户自助打印的服务,包括但不限于文档、图片、表格等多种格式的文件。此外,它们还提供了诸如美颜、换装、文档打印等功能,以及后台管理系统,方便管理员对打…

SpringBoot之内容协商

现象演示 假设有一个需求是根据终端的不同,返回不同形式的数据,比如 PC 端需要以 HTML 格式返回数据,APP、小程序端需要以 JSON 格式返回数据。这时我们是 coding 几个相似的接口?还是在一个接口里面做复杂判断处理?两…

步进电机改伺服电机

步进电机: 42:轴径5mm 57:轴径8mm 86:轴径14mm 【86CME120闭环】// 12牛米 伺服电机: 40: 60: 80: 86: ECMA——C 1 0910 R S 4.25A 轴径…

树状数组实现 查找逆序对

题意&#xff1a; 输入一个整数n。 接下来输入一行n个整数 。 1< < n ,且每个数字只会出现一次 题解&#xff1a; 按每个数字的大小存入树状数组 #include<bits/stdc.h> using namespace std; #define ll long long const int N10000; int arr[N]; ll a[N];…

Ros2中goal_handle状态SUCCEED及ACCEPTED在rclpy中的死循环

动作通信开发中&#xff0c;我使用rclpy编写代码&#xff0c;进行feedback等操作&#xff0c;前期实现的较为顺利&#xff0c;但所有逻辑均编写完后&#xff0c;却无法将goal_handle提交为succeed状态&#xff0c;以下是我的部分代码&#xff1a; self.server ActionServer(se…

利用Redis bitmap 实现签到案例

数据库实现 设计签到功能对应的数据库表 CREATE TABLE sign_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到年份,month tinyint NOT NULL COMMENT 签到月份,date date NOT NULL COMMENT 签…

GDP播放器 驱动视频播放器 PHP 系统源码 v4.4.3

最重要的是我们自己开发了源代码&#xff0c;因此无论您在使用此工具时遇到什么问题&#xff0c;我们都会快速解决。这个版本演示 分别支持PHP7.4/8.1/8.2三个版本 演示地址

8、Python中的字符串:字符串的基本操作及再论对象是否可变

引言 基于Python系列前面的几篇文章中&#xff0c;应该已经在脑海中对Python中的核心理念&#xff0c;有了一些认知&#xff0c;由于比较关键&#xff0c;这里再来回顾一下&#xff1a; 1、Python中一切皆对象2、对象分为可变对象和不可变对象3、区分重新赋值操作&#xff0c…

Dos(命令符窗口)命令

目录 1. 常用Windows组合键 2. 常用DOS命令 3. 复制操作 4. 当前路径 5. 查看电脑ip地址 6. 切换盘符: 7. 目录 8. 自动补齐 8. 进入某路径&#xff1a;cd 路径 9. 直接进入某个位置 10. 新建文件 11. 查看文件内容 12. 关机 13. 强行终止命令的执行&#xff1a;C…

java基于ssm+vue 旅游信息资源平台

1前台首页功能模块 旅游资源网站 &#xff0c;在系统首页可以查看首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服等内容&#xff0c;如图1所示。 图1系统功能界面图 用户登录、用户注册&#xff0c;在注册页面可以填写用户名、密码、姓名…

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

Maven 分模块设计与开发 继承

介绍 在 Maven 中进行分模块设计&#xff08;multi-module project&#xff09;&#xff0c;可以帮助将一个大型项目分解为更小、更易管理的模块。这种设计方式有助于提高项目的可维护性、复用性和团队协作效率。 继承关系 目录结构 引入父Maven 父坐标 在子项目中引入父亲…

什么是 DDoS 攻击及如何防护DDOS攻击

自进入互联网时代&#xff0c;网络安全问题就一直困扰着用户&#xff0c;尤其是DDOS攻击&#xff0c;一直威胁着用户的业务安全。而高防IP被广泛用于增强网络防护能力。今天我们就来了解下关于DDOS攻击&#xff0c;以及可以防护DDOS攻击的高防IP该如何正确选择使用。 一、什么是…