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

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

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

相关文章

第30天:安全开发-JS 应用NodeJS 指南原型链污染Express 框架功能实现审计0

时间轴: 演示案例: 环境搭建-NodeJS-解析安装&库安装 功能实现-NodeJS-数据库&文件&执行 安全问题-NodeJS-注入&RCE&原型链 案例分析-NodeJS-CTF 题目&源码审计 开发指南-NodeJS-安全 SecGuide 项目、 环境搭建-NodeJ…

Linux:network:wireshark:IO图尖峰实例

从下图可以看出来,这个尖峰还是很明显,比平均值大出不少。这个图是之前发生问题时的一个例子,放到这里做为参考。 在看峰值的时候,需要注意,时间间隔单位,一秒的间隔和100毫秒的间隔看到的信息可能不一样,比如上图,按照100毫秒展示差距很大,平均不到200,峰值到了70…

MySQL——数据类型

一、常见的数据类型及分类 其中上述的数值类型包含了整形和浮点型,文本、二进制类型主要是字符串类型。 整数类型(Integer Types): TINYINT:范围为-128到127或0到255(无符号),用于…

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…

【CSS in Depth 2 精译_065】第四部分:CSS 视觉增强技术 + 第 11 章 颜色与对比概述 + 11.1 通过对比进行交流

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 ✔️ 11.1.1 模式的建立 ✔️11.1.2 还原设计稿 ✔️ 11.2 颜色的定义 文章目录 第四部分 视觉增强技术 Visual e…

中建海龙:科技创新引领建筑业革新,铸就行业影响力

在建筑业这个古老而又充满活力的行业中,中建海龙科技有限公司(以下简称“中建海龙”)凭借其卓越的科技实力和一系列荣誉奖项,正逐步确立其在建筑工业化领域的领导地位,并对整个行业产生了深远影响。 中建海龙自成立以来…

【CDH国产化替代案例】全面简化架构,降低成本,大幅提升数据处理效率

友情链接: 【数据处理效率提升实践】ArgoDB如何助力企业全面实现数据处理效率最大化?【最新案例】ArgoDB新功能之读写分离,助力某医药集团打造高效数据中心,消除传统方案的灵活性限制,确保响应时间的可预测性【指标查…

Electron + Vue 简单实现窗口程序(Windows)从零到一

前言 想做一个桌面应用程序,一直没有找到简单快速可上手的框架。刚好有点前端的底子,就发现了Electron。关于Electron的介绍,请移步 https://www.electronjs.org/ 查阅。 简单来说,引用官网的话,Electron是一个使用 …

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…

Leetcode经典题5--轮转数组

题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入输出示例 : 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…

mac port 安装redis 并设置为系统服务 自定义配置方法

mac系统中,port 包管理工具比brew的速度快N倍,今天就给大家分享一下在macos系统中如何使用 port安装 redis数据库并配置为服务自动启动和自定义redis.conf配置的方法。 1. 安装redis sudo port install redis 2. 启动redis服务 sudo port load redis …

github仓库自动同步到gitee

Github Actions是Github推出的自动化CI/CD的功能,我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中,所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…

工业—使用Flink处理Kafka中的数据_ProduceRecord2

使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…

MongoDB整合SpringBoot

MongoDB整合SpringBoot 环境准备 1.引入依赖 <!--spring data mongodb--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2.配置yml spr…

【Calibre-Web】Calibre-Web服务器安装详细步骤(个人搭建自用的电子书网站,docker-compose安装)

文章目录 一、Calibre-Web和Calibre的区别是什么&#xff1f;使用场景分别是什么&#xff1f;二、服务器安装docker和docker-compose三、服务器安装Calibre-Web步骤1、安装完成后的目录结构2、安装步骤3、初始配置4、启动上传 四、安装Calibre五、docker-compose常用命令六、客…

人工智能驱动的骗局会模仿熟悉的声音

由于人工智能技术的进步&#xff0c;各种现代骗局变得越来越复杂。 这些骗局现在包括人工智能驱动的网络钓鱼技术&#xff0c;即使用人工智能模仿家人或朋友的声音和视频。 诈骗者使用来自社交媒体的内容来制作深度伪造内容&#xff0c;要求提供金钱或个人信息。个人应该通过…

【QT】一个简单的串口通信小工具(QSerialPort实现)

目录 0.简介 1.展示结果 1&#xff09;UI界面&#xff1a; 2&#xff09;SSCOM&#xff08;模拟下位机收发&#xff09;&#xff1a; 3&#xff09;VSPD虚拟串口驱动&#xff08;连接上位机和下位机的串口&#xff09;&#xff1a; 4&#xff09;实际收发消息效果及视频演…

python语法基础---正则表达式(补充)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 上一篇文章中&#xff0c;我们讲到了贪婪匹配和非贪婪匹配&#xff0c;我们在这篇文章中&#xff0c;主要讲的就是贪婪匹配和非贪婪匹配的剩下的部分&#xff0c;话不多说&#x…

Elasticsearch数据迁移(快照)

1. 数据条件 一台原始es服务器&#xff08;192.168.xx.xx&#xff09;&#xff0c;数据迁移后的目标服务器&#xff08;10.2.xx.xx&#xff09;。 2台服务器所处环境&#xff1a; centos7操作系统&#xff0c; elasticsearch-7.3.0。 2. 为原始es服务器数据创建快照 修改elas…