当前位置: 首页 > news >正文

MySQL 主从同步一致性详解

MySQL主从同步是一种数据复制技术,它允许数据从一个数据库服务器(主服务器)自动同步到一个或多个数据库服务器(从服务器)。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细解析MySQL主从同步的一致性问题,并通过案例分析其工作原理。
在这里插入图片描述
一、MySQL主从同步一致性详解

  1. 主从同步原理MySQL主从同步基于二进制日志(binlog)进行。主库将数据的变更写入binlog日志,从库通过IO线程读取这些变更,并写入到本地的中继日志(relay log)中。之后,从库的SQL线程会读取中继日志中的SQL语句并执行,从而保持与主库数据的一致性。
  2. 同步模式MySQL主从同步有三种主要模式:异步复制:主库执行完事务后立即返回结果给客户端,不关心从库是否接收并处理。这是MySQL的默认复制模式,但可能导致数据不一致。半同步复制:主库执行完事务后,会等待至少一个从库接收到binlog并写入relay log后才返回结果给客户端。这种方式提高了数据安全性,但会增加延迟。全同步复制(组复制):主库执行完事务后,会等待所有从库都执行完该事务后才返回结果给客户端。这种方式保证了数据的一致性,但性能较低。
  3. 数据一致性问题主从同步中可能遇到的数据一致性问题主要包括:延迟问题:由于网络延迟、从库性能不足或大事务等原因,从库的数据可能会滞后于主库。数据丢失:在主库发生故障时,如果数据尚未同步到从库,将导致数据丢失。数据冲突:在复杂的同步场景中,如多主复制或级联复制,可能出现数据冲突。
  4. 解决方案优化同步模式:根据业务需求和数据安全性要求选择合适的同步模式。优化从库性能:提升从库硬件配置、优化SQL查询等以减少延迟。使用数据库中间件:如canal、otter等,实现读写分离和数据一致性校验。缓存记录写key法:通过缓存记录写操作的关键信息,在读取时判断是否需要从主库获取最新数据。

二、案例分析

以下是一个简单的MySQL主从同步案例分析:
环境准备主服务器IP:192.168.4.51
从服务器IP:192.168.4.52
配置主服务器启用binlog日志并设置server_id。[mysqld]

server_id=51
log-bin=master51

授权从服务器访问主服务器的binlog。

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.4.52' IDENTIFIED BY 'password';

查看并记录binlog的文件名和位置。

SHOW MASTER STATUS;

配置从服务器设置server_id并启动binlog(可选,如果需要配置从从复制)。[mysqld]

server_id=52
log-bin=slave52  # 如果需要配置从从复制

指定主服务器信息并启动slave进程。

CHANGE MASTER TO
MASTER_HOST='192.168.4.51',
MASTER_USER='repluser',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='master51.000001',
MASTER_LOG_POS=442;
START SLAVE;

查看slave状态以确认同步是否成功。

SHOW SLAVE STATUS\G

验证配置
1、在主服务器上创建数据库和表,并插入数据。
2、在从服务器上查询相同的数据,验证数据是否一致。

三、影响主从同步一致性的因素

1.网络延迟数据传输延迟:主库和从库之间的网络状况不佳时,从库获取主库二进制日志的时间会增加,可能导致从库的数据更新落后于主库。 网络中断:如果网络出现中断,从库在一段时间内无法获取主库的二进制日志,当网络恢复后,可能会出现数据不一致的情况。
2.主从配置差异存储引擎不同:如果主库和从库使用不同的存储引擎,可能会导致某些操作在主库和从库上的执行结果不同。 字符集不同:字符集的不一致可能会导致数据在存储和传输过程中出现乱码等问题,影响数据的一致性。
3.事务处理非事务性操作:在主库上执行非事务性操作(如 MyISAM 存储引擎下的操作)时,如果在操作过程中主库出现故障,可能会导致主从数据不一致。 事务提交顺序:如果主库上的事务提交顺序与从库上的事务重放顺序不同,也可能会导致数据不一致。
4.锁机制锁等待:在主库上,如果一个事务长时间持有锁,可能会导致从库在重放相关操作时出现锁等待,从而影响同步的及时性和一致性。 锁冲突:主库和从库上的锁冲突可能会导致某些操作无法正常执行,进而影响数据一致性。

四、保证主从同步一致性的方法

1.优化网络环境使用高速网络:尽量使用高速、稳定的网络连接主库和从库,减少网络延迟。 网络监控与维护:定期监控网络状况,及时发现并解决网络问题,如网络拥塞、丢包等。
2.统一主从配置存储引擎统一:确保主库和从库使用相同的存储引擎,避免因存储引擎差异导致的问题。 字符集统一:在配置主从库时,统一字符集,保证数据在传输和存储过程中的准确性。
3.事务处理优化使用事务性存储引擎:如 InnoDB 存储引擎,它支持事务的 ACID 属性,能更好地保证数据的一致性。 事务提交顺序控制:在应用程序设计中,尽量保证事务提交的顺序在主从库上是一致的。
4.合理使用锁机制减少锁持有时间:在主库上,尽量减少事务持有锁的时间,避免从库出现长时间的锁等待。 避免锁冲突:合理设计数据库的锁策略,避免主从库上出现锁冲突。

五、案例分析

1、网络延迟导致的主从数据不一致
案例场景:
公司的数据库采用了主从复制架构,主库和从库位于不同的数据中心,之间通过广域网连接。在业务高峰期,网络出现了严重的拥塞,导致从库获取主库二进制日志的速度非常缓慢。
问题表现:
用户在主库上插入了一条新数据,但在从库上查询时,该数据在一段时间内并未出现。
解决方法:
优化网络连接,增加网络带宽,缓解网络拥塞。 调整主从复制的参数,如增加从库获取二进制日志的超时时间,避免因网络延迟导致复制中断。
2、事务处理不当导致的主从数据不一致
案例场景:
在一个电商系统中,主库使用事务来处理订单的生成和库存的更新。在某些情况下,事务在主库上执行过程中出现了异常,但事务并未完全回滚。从库在复制这些操作时,由于事务的不完整性,导致数据不一致。
问题表现:
订单状态显示已支付,但库存并未减少。
解决方法:
优化事务处理代码,确保事务在出现异常时能够正确回滚。 在从库上增加数据校验机制,定期检查主从数据的一致性,发现问题及时修复。
3.锁机制导致的主从数据不一致
案例场景:
在一个高并发的数据库应用中,主库上存在大量的并发事务,这些事务在操作某些数据时需要获取锁。由于锁的竞争激烈,导致从库在重放相关操作时出现锁等待,进而影响了主从同步的一致性。
问题表现:
从库的数据更新明显落后于主库,在某些情况下,从库上的查询结果与主库不一致。
解决方法:
优化事务的并发控制策略,减少锁的竞争。 对频繁被锁的数据进行分区,降低锁冲突的概率。

六、总结

主从同步一致性是 MySQL 数据库架构中一个至关重要的问题。影响主从同步一致性的因素有很多,包括网络延迟、主从配置差异、事务处理和锁机制等。通过优化网络环境、统一主从配置、事务处理优化和合理使用锁机制等方法,可以有效地保证主从同步的一致性。在实际应用中,需要根据具体的案例场景进行分析和处理,及时发现并解决问题,确保数据库系统的稳定运行。

相关文章:

MySQL 主从同步一致性详解

MySQL主从同步是一种数据复制技术,它允许数据从一个数据库服务器(主服务器)自动同步到一个或多个数据库服务器(从服务器)。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细…...

Spring源码导入idea时gradle构建慢问题

当我们将spring源码导入到idea进行构建的时候,spring采用的是gradle进行构建,默认下注在依赖是从https://repo.maven.apache.org会特别慢,需要改为国内的镜像地址会加快速度。 将项目中build.gradle配置进行调整: repositories …...

Dockerfile 安装echarts插件给java提供服务

java调用echarts插件,生成图片保存到磁盘然后插入到pptx中报表。 Dockerfile文件内容: #基础镜像,如果本地仓库没有,会从远程仓库拉取 openjdk:8 FROM docker.io/centos:centos7 #暴露端口 EXPOSE 9311 # 避免centos 日志输出 …...

Springboot小知识(1):启动类与配置

一、启动类(引导类) 在通常情况下,你创建的Spring应用项目都会为你自动生成一个启动类,它是这个应用的起点。 在Spring Boot中,引导类(也称为启动类,通常是main方法所在的类)是整个…...

[CISCN 2019华东南]Web11

[CISCN 2019华东南]Web11 给了两个链接但是都无法访问 这里我们直接抓包试一下 我们插入X-Forwarded-For:127.0.0.1 发现可以修改了右上角的IP地址,从而可以进行注入 {$smarty.version} 查看版本号 if标签执行PHP命令 {if phpinfo()}{/if} 查看协议 {if system(…...

Cypress内存溢出奔溃问题汇总

内存溢出报错信息 <--- Last few GCs ---> [196:0xe58001bc000] 683925 ms: Scavenge 1870.7 (1969.9) -> 1865.6 (1969.9) MB, 6.07 / 0.00 ms (average mu 0.359, current mu 0.444) task; [196:0xe58001bc000] 683999 ms: Scavenge 1872.4 (1969.9) -> 1867.1…...

树莓派4B--OpenCV安装踩坑

报错&#xff1a; Source directory: /tmp/pip-install-pv7l9r25/opencv-python_08fdf5a130a5429f89b0e0eaab39a329 Working directory: /tmp/pip-install-pv7l9r25/opencv-python_08fdf5a130a5429f89b0e0eaab39a329/_skbuild/linux-armv7l-3.7/cmake-build Please check the i…...

电子电气架构 --- 面向服务的汽车诊断架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…...

Pytest --capture 参数详解:如何控制测试执行过程中的输出行为

--capture 选项用于控制测试用例执行过程中标准输出&#xff08;stdout&#xff09;和标准错误输出&#xff08;stderr&#xff09;的捕获行为。 --capture 的选项值&#xff1a; fd&#xff08;默认&#xff09; 捕获文件描述符级别的输出&#xff08;stdout 和 stderr&#x…...

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…...

C++(4个类型转换)

1. C语言中的类型转换 1. 隐式 类型转换&#xff1a; 具有相近的类型才能进行互相转换&#xff0c;如&#xff1a;int,char,double都表示数值。 2. 强制类型转换&#xff1a;能隐式类型转换就能强制类型转换&#xff0c;隐式类型之间的转换类型强相关&#xff0c;强制类型转换…...

Ubuntu20.04安装NVIDIA显卡驱动

Ubuntu20.04安装NVIDIA显卡驱动 参考资料&#xff1a;https://blog.csdn.net/weixin_39244242/article/details/136282614?fromshareblogdetail&sharetypeblogdetail&sharerId136282614&sharereferPC&sharesourceqq_37397652&sharefromfrom_link 成功配置…...

速盾:介绍一下高防cdn的缓存响应事什么功能?

高防CDN&#xff08;Content Delivery Network&#xff09;是一种基于分布式缓存技术的网络加速服务&#xff0c;能够提供强大的缓存响应功能。它的缓存响应功能主要包括缓存加速和智能缓存两个方面。 首先&#xff0c;高防CDN的缓存加速功能是指通过在全球范围内部署大量的缓…...

Nuclei-快速漏洞扫描器

Nuclei-快速漏洞扫描器 声明 学习内容来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3f…...

linux网络抓包工具

linux网络抓包工具 一、tcpdump1.1 基本用法1.2 龙芯平台实例操作 二、wireshark2.1 主要功能2.2 龙芯平台实例操作 一、tcpdump tcpdump 指令可列出经过指定网络界面的数据包文件头&#xff0c;可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协…...

详解桥接模式

引言 在开发过程中&#xff0c;可能会遇到系统设计有多种维度变化的情况&#xff0c;比如我们想画一幅五彩斑斓的画&#xff0c;需要用到12个颜色&#xff0c;但是需要粗细不同的线条&#xff08;粗、中、细&#xff09;&#xff0c;如果用蜡笔&#xff0c;就需要粗中细三种蜡笔…...

探索AI新世界!热门工具与学习资源免费获取

​抖知书老师推荐&#xff1a; 人工智能技术的迅速发展让人们既充满期待又有些迷茫。有人担忧被AI技术取代&#xff0c;有人却积极拥抱这场科技浪潮。无论你处于哪种心态&#xff0c;人工智能已经深入到我们生活的方方面面。如果你希望轻松掌握最新的AI工具与动态&#xff0c;…...

vue3项目搭建-6-axios 基础配置

axios 基础配置 安装 axios npm install axios 创建 axios 实例&#xff0c;配置基地址&#xff0c;配置拦截器,目录&#xff1a;utils/http.js 基地址&#xff1a;在每次访问时&#xff0c;自动作为相对路径的根 // axios 基础封装 import axios from "axios";…...

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…...

代理IP与百度在信息时代的交互

目录 一、代理IP的基本概念和工作原理 二、代理IP在百度搜索中的多重作用 解决网络延时问题&#xff0c;提高搜索速度 提高网络安全 隐藏用户的真实IP地址&#xff0c;保护个人隐私 突破访问限制&#xff0c;拓宽网络视野 三、代理IP在百度关键词排名优化中的应用 模拟…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...